zoukankan      html  css  js  c++  java
  • C#压缩图片

    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Drawing.Imaging;
    using System.IO;
    using System.Linq;
    using System.Web;
    
    namespace Siia.CarParts.UI.Common
    {
        public class ImageHelper
        {
    
            public static bool GetPicThumbnail(string sFile, string outPath, int flag)
            {
                string domainPath = HttpRuntime.AppDomainAppPath.ToString();
                string fileName = sFile.Split('/').Last();
                string filePath = Path.GetFullPath(domainPath + sFile);
                string zipPath = Path.GetFullPath(domainPath + outPath + "\zip");
    
                byte[] bs = File.ReadAllBytes(filePath);
                double size = (bs.Length / 1024);
                if (size < 1024)
                    return true;
                System.Drawing.Image iSource = System.Drawing.Image.FromFile(filePath);
                ImageFormat tFormat = iSource.RawFormat;
                //以下代码为保存图片时,设置压缩质量  
                EncoderParameters ep = new EncoderParameters();
                long[] qy = new long[1];
                qy[0] = flag;//设置压缩的比例1-100  
                EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
                ep.Param[0] = eParam;
                try
                {
                    ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
                    ImageCodecInfo jpegICIinfo = null;
                    for (int x = 0; x < arrayICI.Length; x++)
                    {
                        if (arrayICI[x].FormatDescription.Equals("JPEG"))
                        {
                            jpegICIinfo = arrayICI[x];
                            break;
                        }
                    }
                    if (jpegICIinfo != null)
                    {
                      
                        if (!Directory.Exists(zipPath))
                        {
                            Directory.CreateDirectory(zipPath);
                        }
                        iSource.Save(zipPath+"\"+fileName, jpegICIinfo, ep);//outPath是压缩后的新路径  
                    }
                    //else
                    //{
                    //    iSource.Save(outPath, tFormat);
                    //}
                    return true;
                }
                catch
                {
                    return false;
                }
                finally
                {
                    iSource.Dispose();
                    iSource.Dispose();
                    string sourceFile = zipPath + "\" + fileName;
                    //覆盖源文件  
                    if (System.IO.File.Exists(sourceFile))
                    {
                        System.IO.File.Copy(sourceFile, filePath, true);
                    }
                   
                }
    
            }
    
    
            /// <summary>
            /// 图像缩略图处理
            /// </summary>
            /// <param name="bytes">图像源数据</param>
            /// <param name="compression">压缩质量 1-100</param>
            /// <param name="thumbWidth">缩略图的宽</param>
            /// <param name="thumbHeight">缩略图的高</param>
            /// <returns></returns>
            public static byte[] ConvertToThumbnail(byte[] bytes, int compression = 100, int thumbWidth = 0, int thumbHeight = 0)
            {
                byte[] bs = null;
                try
                {
                    if (bytes != null)
                    {
                        using (MemoryStream ms = new MemoryStream(bytes))
                        {
                            using (Bitmap srcimg = new Bitmap(ms))
                            {
                                if (thumbWidth == 0 && thumbHeight == 0)
                                {
                                    thumbWidth = srcimg.Width;
                                    thumbHeight = srcimg.Height;
                                }
                                using (Bitmap dstimg = new Bitmap(thumbWidth, thumbHeight))//图片压缩质量
                                {
                                    //从Bitmap创建一个System.Drawing.Graphics对象,用来绘制高质量的缩小图。
                                    using (Graphics gr = Graphics.FromImage(dstimg))
                                    {
                                        //把原始图像绘制成上面所设置宽高的缩小图
                                        Rectangle rectDestination = new Rectangle(0, 0, thumbWidth, thumbHeight);
                                        gr.Clear(Color.WhiteSmoke);
                                        gr.CompositingQuality = CompositingQuality.HighQuality;
                                        gr.SmoothingMode = SmoothingMode.HighQuality;
                                        gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
                                        gr.DrawImage(srcimg, rectDestination, 0, 0, srcimg.Width, srcimg.Height, GraphicsUnit.Pixel);
    
                                        EncoderParameters ep = new EncoderParameters(1);
                                        ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, compression);//设置压缩的比例1-100
                                        ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
                                        ImageCodecInfo jpegICIinfo = arrayICI.FirstOrDefault(t => t.FormatID == System.Drawing.Imaging.ImageFormat.Png.Guid);
                                        using (MemoryStream dstms = new MemoryStream())
                                        {
                                            if (jpegICIinfo != null)
                                            {
                                                dstimg.Save(dstms, jpegICIinfo, ep);
                                            }
                                            else
                                            {
                                                dstimg.Save(dstms, System.Drawing.Imaging.ImageFormat.Png);//保存到内存里
                                            }
                                            bs = new Byte[dstms.Length];
                                            dstms.Position = 0;
                                            dstms.Read(bs, 0, bs.Length);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    //LogManager.DefaultLogger.Error(LogConvert.ParseWebEx(ex), string.Concat("ConvertToThumbnail error.", thumbWidth, " ", thumbHeight));
                }
                return bs;
            }
        }
    }
  • 相关阅读:
    DGA域名可以是色情网站域名
    使用cloudflare加速你的网站隐藏你的网站IP
    167. Two Sum II
    leetcode 563. Binary Tree Tilt
    python 多线程
    leetcode 404. Sum of Left Leaves
    leetcode 100. Same Tree
    leetcode 383. Ransom Note
    leetcode 122. Best Time to Buy and Sell Stock II
    天津Uber优步司机奖励政策(12月28日到12月29日)
  • 原文地址:https://www.cnblogs.com/SmilePastaLi/p/7600594.html
Copyright © 2011-2022 走看看