C#生成缩略图不失真的方法

最近一个手持机项目有个需求,因为物料图片的大小不一,有的很大显示到手持机上会只显示图片的一部分,界面显得非常乱,很影响客户的体验度。所以需要一个方法,将上传到服务器上的图片进行处理,按照一定的大小格式进行保存。

下面提供了两种获取图片缩略图的方法,供大家参考。

方法一:通过调用Image对象的自带方法GetThumbnailImage()进行图片转换

        /// <summary>
        /// 生成缩略图重载方法,返回缩略图的Image对象
        /// </summary>
        /// <param name="width">缩略图的宽度</param>
        /// <param name="height">缩略图的高度</param>
        /// <param name="imageFrom">原Image对象</param>
        /// <returns>缩略图的Image对象</returns>
        public Image GetReducedImage2(int width, int height, Image imageFrom)
        {
            // 源图宽度及高度
            int imageFromWidth = imageFrom.Width;
            int imageFromHeight = imageFrom.Height;
            try
            {
                // 生成的缩略图实际宽度及高度.如果指定的高和宽比原图大,则返回原图;否则按照指定高宽生成图片
                if (width >= imageFromWidth && height >= imageFromHeight)
                {
                    return imageFrom;
                }
                else
                {
                    Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(() => { return false; });
                    //调用Image对象自带的GetThumbnailImage()进行图片缩略
                    Image reducedImage = imageFrom.GetThumbnailImage(width, height, callb, IntPtr.Zero);
                    //将图片以指定的格式保存到到指定的位置
                    reducedImage.Save(@"E:\640x480.png", ImageFormat.Png);
                    return reducedImage;
                }
            }
            catch (Exception)
            {
                //抛出异常
                throw new Exception("转换失败,请重试!");
            }
        }

方法二:采用双三次插值法,执行预筛选以确保高质量的收缩,此模式可产生质量教高的转换图像。

        /// <summary>
        /// 按照指定的高和宽生成相应的规格的图片,采用此方法生成的缩略图片不会失真
        /// </summary>
        /// <param name="width">指定宽度</param>
        /// <param name="height">指定高度</param>
        /// <param name="imageFrom">原图片</param>
        /// <returns>返回新生成的图</returns>
        public static Image GetReducedImage(int width, int height, Image imageFrom)
        {
            // 源图宽度及高度
            int imageFromWidth = imageFrom.Width;
            int imageFromHeight = imageFrom.Height;

            // 生成的缩略图实际宽度及高度.如果指定的高和宽比原图大,则返回原图;否则按照指定高宽生成图片
            if (width >= imageFromWidth && height >= imageFromHeight)
            {
                return imageFrom;
            }
            else
            {
                // 生成的缩略图在上述"画布"上的位置
                int X = 0;
                int Y = 0;

                // 创建画布
                Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
                bmp.SetResolution(imageFrom.HorizontalResolution, imageFrom.VerticalResolution);
                using (Graphics g = Graphics.FromImage(bmp))
                {
                    // 用白色清空
                    g.Clear(Color.White);

                    // 指定高质量的双三次插值法。执行预筛选以确保高质量的收缩。此模式可产生质量最高的转换图像。
                    g.InterpolationMode = InterpolationMode.HighQualityBicubic;

                    // 指定高质量、低速度呈现。
                    g.SmoothingMode = SmoothingMode.HighQuality;

                    // 在指定位置并且按指定大小绘制指定的 Image 的指定部分。
                    g.DrawImage(imageFrom, new Rectangle(X, Y, width, height),
                        new Rectangle(0, 0, imageFromWidth, imageFromHeight), GraphicsUnit.Pixel);

                    //将图片以指定的格式保存到到指定的位置
                    bmp.Save(@"E:\640x480.png", ImageFormat.Png);
                    return bmp;
                }
            }
        }

先分享这两种方法,大家可以尝试。

时间: 2024-10-21 03:05:36

C#生成缩略图不失真的方法的相关文章

.net又一个生成缩略图的方法,不变形

生成缩略图是一个十分常用功能,找到了一个方法,重写部分代码,实用又好用,.net又一个生成缩略图的方法,不变形 1 /// <summary> 2 /// 为图片生成缩略图 by 何问起 3 /// </summary> 4 /// <param name="phyPath">原图片的路径</param> 5 /// <param name="width">缩略图宽</param> 6 ///

.net又一个生成缩略图的方法,不变形,非常好用

生成缩略图是一个十分常用功能,找到了一个方法,重写部分代码,实用又好用,.net又一个生成缩略图的方法,不变形 1 /// <summary> 2 /// 为图片生成缩略图 by 何问起 3 /// </summary> 4 /// <param name="phyPath">原图片的路径</param> 5 /// <param name="width">缩略图宽</param> 6 ///

C#简单生成缩略图的方法

本文实例讲述了C#简单生成缩略图的方法.分享给大家供大家参考.具体实现方法如下: /// <summary> /// 生成缩略图 /// </summary> /// <param name="originalImagePath">源图路径(物理路径)</param> /// <param name="thumbnailPath">缩略图路径(物理路径)</param> /// <para

php获取远程图片url生成缩略图的方法

getimg.php <?php /** * *函数:调整图片尺寸或生成缩略图 *返回:True/False *参数: * $Image 需要调整的图片(含路径) * $Dw=450 调整时最大宽度;缩略图时的绝对宽度 * $Dh=450 调整时最大高度;缩略图时的绝对高度 * $Type=1 1,调整尺寸; 2,生成缩略图 */ $phtypes=array('img/gif', 'img/jpg', 'img/jpeg', 'img/bmp', 'img/pjpeg', 'img/x-png

PS如何批量生成缩略图(方法可以通用其他重复劳动)

原图 缩略 进入正题,学生时代玩过脚本精灵的应该一点就通 原理就是:录制一系列动作,然后生成脚本,并执行(经常PS水印代码的一个可以用程序实现,一个就可以用PS脚本) 新建一个组 新建一个动作 进行你的重复操作,它会记录下来 比如:缩小一下大小再导出 停止录制,框框里面就是PS记录的动作 生成批处理 选择参数,比如来源文件夹,存储文件夹等等(扩:批量重命名图片是不是也就可以这么玩一个,思路无限,只差人想) 结束了

C#生成缩略图代码

/**//// <summary>        /// 生成缩略图        /// </summary>        /// <param name="originalImagePath">源图路径(物理路径)</param>        /// <param name="thumbnailPath">缩略图路径(物理路径)</param>        /// <param 

ASP组件AspJpeg(加水印)生成缩略图等使用方法

ASP组件AspJpeg(加水印)生成缩略图等使用方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-12-17我要评论 ASPJPEG是一款功能相当强大的图象处理组件,用它可以轻松地做出图片的缩略图和为图片加上水印功能.下面简单介绍一下使用方法,需要的朋友可以了解下 一.为图片添加水印 复制代码 代码如下: <% Dim Jpeg ''''//声明变量 Set Jpeg = Server.CreateObject("Persits.Jpeg") ''''//调用组件

C# 生成缩略图 方法

#region -生成缩略图- /// <summary> /// 生成缩略图 /// </summary> /// <param name="orginalImagePath">原图片对象</param> /// <param name="thumbnailPath">缩略图的路径</param> /// <param name="width">指定宽度<

生成缩略图时报GDI+中发生一般性错误

最近由于业务需要要写一个生成缩略图并能设置图片质量的功能,本来这是一件so easy的事,以前也干过,可是却遇到了问题.话不多说先看代码 /// <summary> /// 等比生成缩略图 /// </summary> /// <param name="originalImagePath">源图路径(物理路径)</param> /// <param name="thumbnailPath">缩略图路径(物理