zoukankan      html  css  js  c++  java
  • 图片压缩后,依然很大的解决方案

    昨天碰到一个很奇怪的事情,在最近的一个项目有这样的一个需求,把上传的图片进行压缩,避免因图片过大而影响浏览速度。

     

    代码也很简单三两句就可以实现了,但发现压缩后的图片,虽然有变小,但还不是很明显。

    代码如下: 

     

     

    01 public void CreateThumbnailImage()
    02 {
    03     Image img = Image.FromFile("e:/1.jpg");
    04     Image.GetThumbnailImageAbort cb = new Image.GetThumbnailImageAbort(CallBack);
    05     Image thumbnailImage = img.GetThumbnailImage(120, 120, cb, System.IntPtr.Zero);
    06     thumbnailImage.Save("e:/2.jpg");
    07 }
    08 public bool CallBack()
    09 {
    10     return false;
    11 }

    本来是一张大约800*700的图片(80kb),压缩到120*110左右的图片,大小应该在10kb以内,但我却发现压缩后的图片却有45kb。有个别的图片压缩后反而比原来的更大,而且用网页打开也无法显示。

    后来查了一下相关的文档,发现.net在保存图片时,是以png默认的格式来保存,我想问题应该就是出在这了,还是试试吧。  

    01 //获得缩略图
    02 public void CreateThumbnailImage()
    03 {
    04     string imgFile = "e:/1.jpg";
    05     Image img = Image.FromFile(imgFile);
    06     Image.GetThumbnailImageAbort cb = new Image.GetThumbnailImageAbort(CallBack);
    07     Image thumbnailImage = img.GetThumbnailImage(120, 120, cb, System.IntPtr.Zero);
    08     string extendName = imgFile.Substring(imgFile.LastIndexOf(".") + 1);
    09     ImageFormat imgFormat = GetImageFormat(extendName);
    10     thumbnailImage.Save("e:/2.jpg",imgFormat);
    11 }
    12 public bool CallBack()
    13 {
    14     return     false;
    15 }
    16 //获得图片格式
    17 private static ImageFormat GetImageFormat(String extendName)
    18 {
    19     extendName = extendName.ToLower();
    20     if (extendName == "gif")
    21     {
    22         return ImageFormat.Gif;
    23     }
    24     else if (extendName == "jpg" || extendName == "jpeg")
    25     {
    26         return ImageFormat.Jpeg;
    27     }
    28     else if (extendName == "bmp")
    29     {
    30         return ImageFormat.Bmp;
    31     }
    32     else if (extendName == "wmf")
    33     {
    34         return ImageFormat.Emf;
    35     }
    36     else if (extendName == "exif")
    37     {
    38         return ImageFormat.Exif;
    39     }
    40     else if (extendName == "icon")
    41     {
    42         return ImageFormat.Icon;
    43     }
    44     else if (extendName == "tiff")
    45     {
    46         return ImageFormat.Tiff;
    47     }
    48     else
    49     {
    50         return ImageFormat.Png;
    51     }
    52 }

     

     

     

    还真的是这样,压缩后的图片大小就只有4.6kb。

     

    压缩注意事项:

     

    1、压缩图片要指定保存的格式,虽然保存后图片名称是对的,但图片还是很大,而且在网页上还无法显示。

     

    2、对于图片格式为gif且为透明的图片,如果压缩后要保留透明的,那压缩的格式就要用png的,而且图片的扩展名也为png,若压缩成gif的格式,它无法保留透明的部分。

  • 相关阅读:
    HTML5 API分享
    承接VR外包,虚拟现实外包,北京正规公司
    虚拟现实外包—动点飞扬软件专门承接VR/AR场景、游戏、项目外包
    Unity3d外包—就找北京动点软件(长年承接Unity3d软件、游戏项目外包)
    Kinect外包团队— 2016中国VR开发者论坛第一期
    Kinect外包-就找北京动点飞扬软件(长年承接微软Kinect体感项目外包,有大型Kinect案例)
    Win10外包公司(长年承接Win10App外包、Win10通用应用外包)
    HTML5外包注意事项-开发HTML5游戏的九大坑与解决方法剖析
    HTML5外包团队:HTML5 Canvas使用教程
    libgo 2.0发布
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1767137.html
Copyright © 2011-2022 走看看