• 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;
            }
        }
    }
  • 相关阅读:
    layui表格数据统计
    浅谈权限控制
    搜索栏实时更新查找内容
    虚拟域名
    关于阿里云服务器安装了Apache开放80端口访问不了网页
    验证码思路
    计算标准差 Exercise07_11
    倒置数组 Exercise07_12
    找出最小元素的下标 Exercise07_10
    找出最小元素 Exercise07_09
  • 原文地址:https://www.cnblogs.com/SmilePastaLi/p/7600594.html
Copyright © 2020-2023  润新知