一个生成缩略图的例子

    技术2022-05-11  77

     using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;using System.Drawing.Imaging;using System.IO;

    public class iMerlImage    {        public bool toThumb;        public bool toMark;        public int thumbHeight        {            set            {                _thumbheight = value;            }            get            {                return _thumbheight;            }        }        public int thumbWidth        {            set            {                _thumbwidth = value;            }            get            {                return _thumbwidth;            }        }        public string waterMarkFile        {            set            {                _waterMarkFile = value;            }            get            {                return _waterMarkFile;            }        }        public int waterMarkPositionTop        {            set            {                _waterMarkPositionTop = value;            }            get            {                return _waterMarkPositionTop;            }        }        public int waterMarkPositionLeft        {            set            {                _waterMarkPositionLeft = value;            }            get            {                return _waterMarkPositionLeft;            }        }

            private int _thumbheight;        private int _thumbwidth;        private string _waterMarkFile;        private int _waterMarkPositionTop;        private int _waterMarkPositionLeft;        private string sourceImagePath;

            private Hashtable htmimes = new Hashtable();

            internal readonly string AllowExt = ".jpe|.jpeg|.jpg|.png|.tif|.tiff|.bmp";

            /// <summary>        /// 初始化实例        /// </summary>        /// <param name="ImgPath"></param>        public iMerlImage(string ImgPath)        {            sourceImagePath = ImgPath;

                #region init htmimes            htmimes[".jpeg"] = "image/jpeg";            htmimes[".jpg"] = "image/jpeg";            htmimes[".png"] = "image/png";            htmimes[".tif"] = "image/tiff";            htmimes[".tiff"] = "image/tiff";            htmimes[".bmp"] = "image/bmp";            #endregion         }

            #region 生成缩略图

            /// <summary>        /// 将图片变为缩略图        /// </summary>        /// <param name="thumbnailImagePath">目标路径</param>        public void toSmall(string thumbnailImagePath)        {            string SourceImagePath = sourceImagePath;            string ThumbnailImagePath = thumbnailImagePath;            int ThumbnailImageWidth = _thumbwidth;            string sExt = SourceImagePath.Substring(SourceImagePath.LastIndexOf(".")).ToLower();            if (SourceImagePath.ToString() == System.String.Empty) throw new NullReferenceException("SourceImagePath is null!");            if (!CheckValidExt(sExt))            {                throw new ArgumentException("原图片文件格式不正确,支持的格式有[ " + AllowExt + " ]", "SourceImagePath");            }            //从 原图片 创建 Image 对象             System.Drawing.Image image = System.Drawing.Image.FromFile(SourceImagePath);            int num = ((ThumbnailImageWidth / 4) * 3);            int width = image.Width;            int height = image.Height;            //计算图片的比例             if ((((double)width) / ((double)height)) >= 1.3333333333333333f)            {                num = ((height * ThumbnailImageWidth) / width);            }            else            {                ThumbnailImageWidth = ((width * num) / height);            }            if ((ThumbnailImageWidth < 1) || (num < 1))            {                return;            }            //用指定的大小和格式初始化 Bitmap 类的新实例             Bitmap bitmap = new Bitmap(ThumbnailImageWidth, num, PixelFormat.Format32bppArgb);            //从指定的 Image 对象创建新 Graphics 对象             Graphics graphics = Graphics.FromImage(bitmap);            //清除整个绘图面并以透明背景色填充             graphics.Clear(Color.Transparent);            //在指定位置并且按指定大小绘制 原图片 对象             graphics.DrawImage(image, new Rectangle(0, 0, ThumbnailImageWidth, num));            image.Dispose();            try            {                //将此 原图片 以指定格式并用指定的编解码参数保存到指定文件                 string savepath = (ThumbnailImagePath == null ? SourceImagePath : ThumbnailImagePath);                SaveImage(bitmap, savepath, GetCodecInfo((string)htmimes[sExt]));            }            catch (System.Exception e)            {                throw e;            }            finally            {                bitmap.Dispose();                graphics.Dispose();            }        }

            /// <summary>        /// 保存图片        /// </summary>        /// <param name="image">Image 对象</param>        /// <param name="savePath">保存路径</param>        /// <param name="ici">指定格式的编解码参数</param>        private void SaveImage(System.Drawing.Image image, string savePath, ImageCodecInfo ici)        {            //设置 原图片 对象的 EncoderParameters 对象             EncoderParameters parameters = new EncoderParameters(1);            parameters.Param[0] = new EncoderParameter(Encoder.Quality, ((long)90));            image.Save(savePath, ici, parameters);            parameters.Dispose();        }

            /// <summary>         /// 检测扩展名的有效性         /// </summary>         /// <param name="sExt">文件名扩展名</param>         /// <returns>如果扩展名有效,返回true,否则返回false.</returns>         private bool CheckValidExt(string sExt)         {             bool flag=false;             string[] aExt = AllowExt.Split('|');             foreach(string filetype in aExt)             {                 if(filetype.ToLower()==sExt)                 {                     flag = true;                     break;                 }             }             return flag;         }

            /// <summary>         /// 获取图像编码解码器的所有相关信息         /// </summary>         /// <param name="mimeType">包含编码解码器的多用途网际邮件扩充协议 (MIME) 类型的字符串</param>         /// <returns>返回图像编码解码器的所有相关信息</returns>         static ImageCodecInfo GetCodecInfo(string mimeType)        {            ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();            foreach (ImageCodecInfo ici in CodecInfo)            {                if (ici.MimeType == mimeType) return ici;            }            return null;        }

            #endregion}


    最新回复(0)