跪求C#将网络图片转为base64格式的方法
alifengsi2 发布于2019-03 浏览:7165 回复:6
1
收藏

我只会把本地图片转为base64 有大神知道如何将url转成base64格式吗?

public string ImgToBase64String(string Imagefilename)
{
try
{
Bitmap bmp = new Bitmap(Imagefilename);
MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(arr, 0, (int)ms.Length);
ms.Close();
return Convert.ToBase64String(arr);
}
catch (Exception ex)
{
return null;
}
}

收藏
点赞
1
个赞
共6条回复 最后由淡蓝色月夜回复于2019-08
#7淡蓝色月夜回复于2019-08

其实可以将文件流保存到内存流中,然后将内存流保存为base64

0
#6goJhou回复于2019-03
#5 用户已被禁言回复
空闲你给写一份^_^

就上头那代码

0
#5用户已被禁言回复于2019-03
#4 goJhou回复
GET请求拿下来的byte数组就是IO拿下来的byte数组。放内存里转一下就行了。 楼主既然会写本地的,那缺的逻辑只剩网络拿图的方式了。 给你一个参考例子 [代码]
展开

空闲你给写一份^_^

1
#4goJhou回复于2019-03
#3 用户已被禁言回复
看错了。网络图片转base64不能直接转。你需要先下载下来。保存文件再转base64.也就是你需要自己写一个下载文件的方法
展开

GET请求拿下来的byte数组就是IO拿下来的byte数组。放内存里转一下就行了。

楼主既然会写本地的,那缺的逻辑只剩网络拿图的方式了。

给你一个参考例子

private static async Task DownloadImags(string url)
    {
        var client = new HttpClient();
        System.IO.FileStream fs;
        int a = 1;
        //文件名:序号+.jpg。可指定范围,以下是获取100.jpg~500.jpg.
        for (int i = 100; i <= 500; i++)
        {
            var uri = new Uri(Uri.EscapeUriString(url+i.ToString()+".jpg"));
            byte[] urlContents = await client.GetByteArrayAsync(uri);
            fs = new System.IO.FileStream(AppDomain.CurrentDomain.BaseDirectory + "\\images\\"+ i.ToString() + ".jpg",System.IO.FileMode.CreateNew);
            fs.Write(urlContents, 0, urlContents.Length);
            Console.WriteLine(a++);
        }
    }
--------------------- 
作者:tb_ 
来源:CSDN 
原文:https://blog.csdn.net/wanglui1990/article/details/80448943 
版权声明:本文为博主原创文章,转载请附上博文链接!
0
#3用户已被禁言回复于2019-03
#2 用户已被禁言回复
试试看。 [代码]

看错了。网络图片转base64不能直接转。你需要先下载下来。保存文件再转base64.也就是你需要自己写一个下载文件的方法

1
#2用户已被禁言回复于2019-03

试试看。

public static string UrlEncode(string input)
        {
            StringBuilder newBytes = new StringBuilder();
            var urf8Bytes = Encoding.UTF8.GetBytes(input);

            foreach (var item in urf8Bytes)
            {
                if (IsSpace((char)item))
                {
                    newBytes.Append("+");
                }
                else if (IsReverseChar((char)item))
                {
                    newBytes.Append('%');
                    newBytes.Append(ByteToHex(item).ToUpper());
                }
                else
                {
                    newBytes.Append((char)item);
                }
            }

            return newBytes.ToString();
        }

        private static bool IsReverseChar(char c)
        {
            return !((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')
                    || c == '-' || c == '_' || c == '.' || c == '~');
        }

        private static bool IsSpace(char c)
        {
            return c == ' ';
        }

        private static string ByteToHex(byte b)
        {
            return b.ToString("x2");
        }
1
TOP
切换版块