• 压缩图片C#算法


    转载自 http://www.open-open.com/lib/view/open1391348644910.html

    using System.IO;  
    using System.Drawing;  
    using System.Drawing.Imaging;  
    using System;  
    namespace Bll  
    {  
        /// <summary>  
        /// 图片处理类  
        /// 1、生成缩略图片或按照比例改变图片的大小和画质  
        /// 2、将生成的缩略图放到指定的目录下  
        /// </summary>  
        public class ImageHepler  
        {  
            public Image ResourceImage, ReducedImage;  
            private int ImageWidth;  
            private int ImageHeight;  
            public string ErrMessage;  
      
            /// <summary>  
            /// 类的构造函数  
            /// </summary>  
            /// <param name="ImageFileName">图片文件的全路径名称</param>  
            public ImageHepler(string ImageFileName)  
            {  
                ResourceImage = Image.FromFile(ImageFileName);  
                ErrMessage = "";  
            }  
      
            public bool ThumbnailCallback()  
            {  
                return false;  
            }  
      
            /// <summary>  
            /// 生成缩略图,返回缩略图的Image对象  
            /// </summary>  
            /// <param name="Width">缩略图的宽度</param>  
            /// <param name="Height">缩略图的高度</param>  
            /// <returns>缩略图的Image对象</returns>  
            public Image GetReducedImage(int Width, int Height)  
            {  
                double LengthLong;          //存储(长和宽中)较短的长度  
                int widthOK, heightOK;      //存储实际要生成的图片的长宽  
                if (Width < Height)         //判断输入的长和宽那个较短  
                {  
                    LengthLong = Width;     //把较短的存储在 LengthLonh 用于计算  
                }  
                else  
                {  
                    LengthLong = Height;  
                }  
                try  
                {  
                    //判断原图片 长和宽   
                    //原图比较长的一个边要和缩略图的边相等  
                    if (ResourceImage.Width > ResourceImage.Height)  
                    {  
                        widthOK = (int)LengthLong;  
                        heightOK = (int)(LengthLong / ResourceImage.Width * ResourceImage.Height);  
                    }  
                    else  
                    {  
                        heightOK = (int)LengthLong;  
                        widthOK = (int)LengthLong / ResourceImage.Height * ResourceImage.Width;  
      
                    }  
                    Image ReducedImage;  
                    Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);  
                    ReducedImage = ResourceImage.GetThumbnailImage(widthOK, heightOK, callb, IntPtr.Zero);  
                    return ReducedImage;  
                }  
                catch (Exception e)  
                {  
                    ErrMessage = e.Message;  
                    return null;  
                }  
            }  
      
            /// <summary>  
            /// 生成缩略图,将缩略图文件保存到指定的路径  
            /// </summary>  
            /// <param name="Width">缩略图的宽度</param>  
            /// <param name="Height">缩略图的高度</param>  
            /// <param name="targetFilePath">缩略图保存的全文件名,(带路径),参数格式:D:Imagesfilename.jpg</param>  
            /// <returns>成功返回true,否则返回false</returns>  
            public bool GetReducedImage(int Width, int Height, string targetFilePath)  
            {  
                double LengthLong;          //存储(长和宽中)较短的长度  
                int widthOK, heightOK;      //存储实际要生成的图片的长宽  
                if (Width < Height)         //判断输入的长和宽那个较短  
                {  
                    LengthLong = Width;     //把较短的存储在 LengthLonh 用于计算  
                }  
                else  
                {  
                    LengthLong = Height;  
                }  
                try  
                {  
                    //判断原图片 长和宽   
                    //原图比较长的一个边要和缩略图的边相等  
                    if (ResourceImage.Width > ResourceImage.Height)  
                    {  
                        widthOK = (int)LengthLong;  
                        heightOK = (int)(LengthLong / ResourceImage.Width * ResourceImage.Height);  
                    }  
                    else  
                    {  
                        heightOK = (int)LengthLong;  
                        widthOK = (int)LengthLong / ResourceImage.Height * ResourceImage.Width;  
                    }  
                    Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);  
                    ReducedImage = ResourceImage.GetThumbnailImage(widthOK, heightOK, callb, IntPtr.Zero);  
                    ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);  
                    //ReducedImage.Dispose();  
                    return true;  
                }  
                catch (Exception e)  
                {  
                    ErrMessage = e.Message;  
                    return false;  
                }  
            }  
      
            /// <summary>  
            /// 生成缩略图,返回缩略图的Image对象  
            /// </summary>  
            /// <param name="Percent">缩略图的宽度百分比 如:需要百分之80,就填0.8</param>    
            /// <returns>缩略图的Image对象</returns>  
            public Image GetReducedImage(double Percent)  
            {  
                try  
                {  
                    Image ReducedImage;  
                    Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);  
                    ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);  
                    ImageHeight = Convert.ToInt32(ResourceImage.Width * Percent);  
                    ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);  
                    return ReducedImage;  
                }  
                catch (Exception e)  
                {  
                    ErrMessage = e.Message;  
                    return null;  
                }  
            }  
      
            /// <summary>  
            /// 生成缩略图,返回缩略图的Image对象  
            /// </summary>  
            /// <param name="Percent">缩略图的宽度百分比 如:需要百分之80,就填0.8</param>    
            /// <param name="targetFilePath">缩略图保存的全文件名,(带路径),参数格式:D:Imagesfilename.jpg</param>  
            /// <returns>成功返回true,否则返回false</returns>  
            public bool GetReducedImage(double Percent, string targetFilePath)  
            {  
                try  
                {  
                    Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);  
                    ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);  
                    ImageHeight = Convert.ToInt32(ResourceImage.Width * Percent);  
                    ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);  
                    ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);  
                    //ReducedImage.Dispose();  
                    return true;  
                }  
                catch (Exception e)  
                {  
                    ErrMessage = e.Message;  
                    return false;  
                }  
            }  
        }  
    }  
  • 相关阅读:
    基于WPF的UI自动化测试[1] 自动化测试工具
    PSR
    技术型人员如何晋升项目经理
    HyperV 组件架构(1)—总体架构
    从技术到管理:工作转型后角色定位
    Web性能优化方案
    一个项目经理的一些个人体会
    从技术人才到项目管理的跨越
    研发项目经理的管理
    从程序类转向销售类工作,该如何进行?
  • 原文地址:https://www.cnblogs.com/qishiguilai/p/3743996.html
Copyright © 2020-2023  润新知