zoukankan      html  css  js  c++  java
  • 压缩图片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;  
                }  
            }  
        }  
    }  
  • 相关阅读:
    Replication:The replication agent has not logged a progress message in 10 minutes.
    分区管理
    获取URL最后一个 ‘/’ 之后的字符
    Replication 第四篇:事务复制中Subscriber的主键列是只读的
    窗口和窗口函数
    SQL Server 日期格式和日期操作
    约束4:唯一约束,Check约束和null
    约束3:default约束
    Merge语句中NULL的陷阱
    查询“全部”
  • 原文地址:https://www.cnblogs.com/qishiguilai/p/3743996.html
Copyright © 2011-2022 走看看