zoukankan      html  css  js  c++  java
  • c#图片下载的标准写法

    MemoryStream的介绍:http://www.cnblogs.com/JimmyZheng/archive/2012/04/14/2446507.html

    bitmap.Save(strOutputPathJpg, System.Drawing.Imaging.ImageFormat.Png);
    using (Bitmap bmp = new Bitmap(@"D:\map\v10-841-142-1357879384609.jpg")) { ImageFormat format = bmp.RawFormat; Console.WriteLine(format); Console.WriteLine(); } 虽然扩展名为jpg 但确实是PNG 判断依据是:Guid互相对应。。。这里的GUID是怎么规定的 how why

    下一次再试一次。
    bmp Guid = {b96b3cab-0728-11d3-9d7b-0000f81ef32e}
    emf  Guid = {b96b3cac-0728-11d3-9d7b-0000f81ef32e}
    exif   Guid = {b96b3cb2-0728-11d3-9d7b-0000f81ef32e}
    gif    Guid = {b96b3cb0-0728-11d3-9d7b-0000f81ef32e}
    Guid = {b96b3cb5-0728-11d3-9d7b-0000f81ef32e} icon
    Guid = {b96b3cae-0728-11d3-9d7b-0000f81ef32e} jepg
    Guid = {b96b3caa-0728-11d3-9d7b-0000f81ef32e} memorymap
    Guid = {b96b3caf-0728-11d3-9d7b-0000f81ef32e} png
    Guid = {b96b3cb1-0728-11d3-9d7b-0000f81ef32e} tiff
    Guid = {b96b3cad-0728-11d3-9d7b-0000f81ef32e} wmf

    图片下载的标准写法
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.IO;
    using System.Drawing;
    using System.Drawing.Imaging;

    namespace cn.tianditu.crawl.tile.core
    {
        public class HttpUtil
        {
            public static void DownImg(TileUri uri)
            {
                HttpWebResponse response = null;
                Stream stream = null;
                FileStream writer = null;

                try
                {
                    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri.Url);
                    request.Timeout = 60 * 1000;
                    response = (HttpWebResponse)request.GetResponse();

                    uri.HttpStatus = response.StatusCode;
                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        Console.WriteLine(response.StatusCode);
                        return;
                    }

                    stream = response.GetResponseStream();
                    using (Image bitmap = Image.FromStream(stream))//如果不是图片这里会异常
                    {
                        String ext = RecognizeImgExtName(bitmap.RawFormat);
                        String imgFileName = uri.FileNameNoExt + ext;
                        using (MemoryStream ms = new MemoryStream())
                        {
                            bitmap.Save(ms, bitmap.RawFormat);
                            Byte[] bytes = ms.ToArray();
                            int size = bytes.Length;//可以在这里根据图像大小进行过滤
                            writer = new FileStream(imgFileName, FileMode.OpenOrCreate, FileAccess.Write);
                            writer.Write(bytes, 0, size);
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    uri.DownFailedReason = e;
                }
                finally
                {
                    if (writer != null)
                    {
                        writer.Close();
                        writer.Dispose();
                    }
                    if (stream != null)
                    {
                        stream.Close();
                        stream.Dispose();
                    }
                    if (response != null)
                    {
                        response.Close();
                    }
                }
            }

            private static string RecognizeImgExtName(ImageFormat imageFormat)
            {
                if (imageFormat.Equals(ImageFormat.Png))
                {
                    return ".png";
                }
                else if (imageFormat.Equals(ImageFormat.Jpeg))
                {
                    return ".jpg";
                }
                else if (imageFormat.Equals(ImageFormat.Bmp))
                {
                    return ".bmp";
                }
                else if (imageFormat.Equals(ImageFormat.Gif))
                {
                    return ".gif";
                }
                else if (imageFormat.Equals(ImageFormat.Icon))
                {
                    return ".icon";
                }
                else if (imageFormat.Equals(ImageFormat.Exif))
                {
                    return ".exif";
                }
                else if (imageFormat.Equals(ImageFormat.Tiff))
                {
                    return ".tiff";
                }
                else if (imageFormat.Equals(ImageFormat.Emf))
                {
                    return ".emf";
                }
                throw new Exception("不能识别的图片格式(ImageFormat)");
            }
        }
    }

  • 相关阅读:
    iOS Reachability检测网络状态
    开始运行命令大全
    IBM-x3650做RAID5更换硬盘后rebuild步骤分享
    使用VMware Converter Standalone Client进行虚拟机 P2V提示 权限不足,无法连接\ipadmin$的解决方法集锦
    共享文件夹 帐号密码正确,却一直提示输入帐号密码的解决办法
    Cisco 关闭命令同步提示信息
    EtherChannel(PAgP、LACP)基本配置--端口聚合--(转)
    Cisco Port-Channel 设置(链路聚合--重点)
    SQL Server 2008作业失败无法确定所有者是否有服务器访问权限
    windows server 2003 远程桌面最大连接数调整与windows 2008远程桌面后,本地帐号自动锁定
  • 原文地址:https://www.cnblogs.com/i80386/p/2856242.html
Copyright © 2011-2022 走看看