zoukankan      html  css  js  c++  java
  • 通过URL地址将图片保存到本地

    今天一朋友问我如何通过URL地址将图片保存下来。

    特地找了些资源,实现了一下代码:

    using System;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.IO;
    using System.Net;
    
    namespace ConsoleApp3
    {
        class Program
        {
            static void Main(string[] args)
            {
                var imgUrl = "http://emoji.qpic.cn/wx_emoji/haiannhLHhY7B1tX6eZ2BGNh9kzx3VCQ2MJfSQkSgE47sEXofVVoPCiaZKYbPcyQhS/";
                var imgByte = GetBytesFromUrl(imgUrl);
                if (imgByte.Length > 0)
                {
                    var image = BytesToImage(imgByte);
                    if (image != null)
                    {
                        var mimeType = GetMimeType(image);
                        if (!string.IsNullOrEmpty(mimeType))
                        {
                            var fileName = AppDomain.CurrentDomain.BaseDirectory + "\imgses\" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "." + mimeType;
                            CreateImageFromBytes(fileName, imgByte);
                        }
                    }
                }
            }
    
            /// <summary>
            /// 将http路径图片转为byte字节数据
            /// </summary>
            /// <param name="url"></param>
            /// <returns></returns>
            public static byte[] GetBytesFromUrl(string url)
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    
                byte[] bytes;
                using (Stream stream = request.GetResponse().GetResponseStream())
                {
                    using (MemoryStream mstream = new MemoryStream())
                    {
                        int count = 0;
                        byte[] buffer = new byte[1024];
                        int readNum = 0;
                        while ((readNum = stream.Read(buffer, 0, 1024)) > 0)
                        {
                            count = count + readNum;
                            mstream.Write(buffer, 0, readNum);
                        }
                        mstream.Position = 0;
                        using (BinaryReader br = new BinaryReader(mstream))
                        {
                            bytes = br.ReadBytes(count);
                        }
                    }
                }
                return bytes;
            }
    
            /// <summary>
            /// 将byte字节数据转为Image图片
            /// </summary>
            /// <param name="bytes">字节数组</param>
            /// <returns>图片</returns>
            public static Image BytesToImage(byte[] bytes)
            {
                Image image = null;
                using (MemoryStream ms = new MemoryStream(bytes))
                {
                    ms.Write(bytes, 0, bytes.Length);
                    image = Image.FromStream(ms, true);
                }
                return image;
            }
            
            /// <summary>
            /// 将Image图片转为byte字节数据
            /// </summary>
            /// <param name="image"></param>
            /// <returns></returns>
            public static byte[] ImageToBytes(Image image)
            {
                byte[] bt = null;
                if (!image.Equals(null))
                {
                    using (MemoryStream mostream = new MemoryStream())
                    {
                        Bitmap bmp = new Bitmap(image);
                        bmp.Save(mostream, ImageFormat.Bmp);//将图像以指定的格式存入缓存内存流
                        bt = new byte[mostream.Length];
                        mostream.Position = 0;//设置留的初始位置
                        mostream.Read(bt, 0, Convert.ToInt32(bt.Length));
                    }
                }
                return bt;
            }
    
            /// <summary>
            /// 根据Image图片获取图片类型
            /// </summary>
            /// <param name="image"></param>
            /// <returns></returns>
            public static string GetMimeType(Image image)
            {
                var mimeType = "";
                var ImageCodec = ImageCodecInfo.GetImageDecoders();
                foreach (var item in ImageCodec)
                {
                    if (item.FormatID == image.RawFormat.Guid)
                    {
                        mimeType = item.MimeType.Split('/')[1];
                        break;
                    }
                }
                return mimeType;
            }
    
            /// <summary>
            /// 将byte[]图片保存到指定文件
            /// </summary>
            /// <param name="fileName">保存的完整路径(包含文件名)</param>
            /// <param name="bytes"></param>
            /// <returns></returns>
            public static void CreateImageFromBytes(string fileName, byte[] bytes)
            {
                string file = fileName;
                FileInfo info = new FileInfo(fileName);
                Directory.CreateDirectory(info.Directory.FullName);
                File.WriteAllBytes(file, bytes);
            }
        }
    }

    代码仅供参考。

  • 相关阅读:
    P2634 [国家集训队]聪聪可可
    P2051 [AHOI2009]中国象棋
    java集成工具的简单总结
    java-web中的web.xml中的servlet和servlet-mapping标签,及网页处理流程
    ecplist中快速添加set get方法
    Spring创建容器之new ClassPathXmlApplicationContext错误
    设计模式之工厂模式
    java-web项目的eclipse里面引入jar包
    DES原理及代码实现
    Linux网络篇,ssh原理及应用
  • 原文地址:https://www.cnblogs.com/wsk198726/p/15205208.html
Copyright © 2011-2022 走看看