zoukankan      html  css  js  c++  java
  • 【aspnetcore】抓取远程图片

    找到要抓取的图片地址:http://i.imgur.com/8S7OaEB.jpg

    抓取的步骤:

    1. 请求图片路径
    2. 获取返回的数据
    3. 将数据转换为stream
    4. 将stream转换为Image
    5. 保存Image

    明晰了步骤,接下来就简单了,直接上代码

    public class RemoteImageCatchUtil
    {
        private static string[] ImageExts = new[] { "jpg", "jpeg", "png", "bitmap", "gif" };
    
        public static string Catch(string remoteImagePath, string saveFolder, int timeout = 2000)
        {
            try
            {
                var request = WebRequest.Create(remoteImagePath) as HttpWebRequest;
                request.Timeout = timeout > 0 ? timeout : 1000;
                using (var response = request.GetResponse() as HttpWebResponse)
                {
                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        throw new Exception("远程访问失败");
                    }
                    else
                    {
                        var ext = GetImageExtension(response.ContentType).ToLower();
                        if (!ImageExts.Contains(ext))
                        {
                            throw new Exception("非图片文件");
                        }
    
                        var stream = response.GetResponseStream();
                        var buffer = new byte[2048];
                        int count;
                        using (var ms = new MemoryStream())
                        {
                            while ((count = stream.Read(buffer, 0, buffer.Length)) != 0)
                            {
                                ms.Write(buffer, 0, count);
                            }
    
                            if (!Directory.Exists(saveFolder))
                            {
                                Directory.CreateDirectory(saveFolder);
                            }
                            var imageName = Path.GetRandomFileName() + "." + ext;
                            var imagePath = Path.Combine(saveFolder, imageName);
                            var image = new Bitmap(ms);
                            image.Save(imagePath);
                            return imageName;
                        }
                    }
                }
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }
    
        private static string GetImageExtension(string contentType)
        {
            if (contentType.StartsWith("image"))
            {
                return contentType.Split(@"/").Last();
            }
            return string.Empty;
        }
    }
    

    注意,这里的代码仅供测试,使用时请自行完善。

  • 相关阅读:
    [HAOI2015]按位或——Min-Max容斥+FWT
    HDU 4773 Problem of Apollonius——圆反演
    类欧几里得小结
    线性规划(单纯形法)知识整理
    奇怪的数学题(51nod1847)——min_25筛+杜教筛+第二类斯特林数
    CSP-S 2019 游记
    2019.11.11~2019.11.12考试总结
    2019.11.6~2019.11.7考试总结
    1019.11.1~2019.11.2考试总结
    Final-阶段站立会议4
  • 原文地址:https://www.cnblogs.com/diwu0510/p/10336444.html
Copyright © 2011-2022 走看看