dot自带的生成缩略图的方法是Bitmap.GetThumbnailImage这个方法生成的缩略图不够清晰,一般我们会使用Graphics高质量插值发生成清晰的缩略图,这时候大小会不尽人意,怎么办?我们可以使用jpeg压缩的方法压缩一下图片,这样图片的大小会缩小到压缩前的十分之一。
下面是完成这项工作的代码:

压缩图片的三种方式
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.IO;

namespace ConsoleApplication3_ThumbnailImg
{
    class Program
    {
        const int HEIGHT = 190;
        const int WIDTH = 190;
        static void Main(string[] args)
        {
            string srcImgPath = @"G:\photoes\20060725\Picture 057.jpg";
            string targetFolder = @"E:\Diary\Test\thumbnail";

            SetThumbnail_1(srcImgPath, targetFolder);
            SetThumbnail_2(srcImgPath, targetFolder);
            SetThumbnail_3(srcImgPath, targetFolder);

            Console.Read();
        }

        static void SetThumbnail_1(string srcImgPath, string targetFolder)
        {
            using (Bitmap source = new Bitmap(srcImgPath))
            {
                // return the source image if it's smaller than the designated thumbnail   
                int wi, hi;
                wi = WIDTH;
                hi = HEIGHT;


                // maintain the aspect ratio despite the thumbnail size parameters   
                if (source.Width > source.Height)
                {
                    wi = WIDTH;
                    hi = (int)(source.Height * ((decimal)WIDTH / source.Width));
                }
                else
                {
                    hi = HEIGHT;
                    wi = (int)(source.Width * ((decimal)HEIGHT / source.Height));
                }

                using (Image thumb = source.GetThumbnailImage(wi, hi, null, IntPtr.Zero))
                {
                    string targetPath = Path.Combine(targetFolder, "th_1.jpg");
                    thumb.Save(targetPath);
                }
            }
        }

        static void SetThumbnail_2(string srcImgPath, string targetFolder)
        {
            using (Bitmap source = new Bitmap(srcImgPath))
            {
                // return the source image if it's smaller than the designated thumbnail   
                int wi, hi;
                wi = WIDTH;
                hi = HEIGHT;


                // maintain the aspect ratio despite the thumbnail size parameters   
                if (source.Width > source.Height)
                {
                    wi = WIDTH;
                    hi = (int)(source.Height * ((decimal)WIDTH / source.Width));
                }
                else
                {
                    hi = HEIGHT;
                    wi = (int)(source.Width * ((decimal)HEIGHT / source.Height));
                }

                // original code that creates lousy thumbnails   
                // System.Drawing.Image ret = source.GetThumbnailImage(wi,hi,null,IntPtr.Zero);   
                using (System.Drawing.Bitmap thumb = new Bitmap(wi, hi))
                {
                    using (Graphics g = Graphics.FromImage(thumb))
                    {
                        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                        g.FillRectangle(Brushes.White, 0, 0, wi, hi);
                        g.DrawImage(source, 0, 0, wi, hi);
                    }
                    string targetPath = Path.Combine(targetFolder, "th_2.jpg");
                    thumb.Save(targetPath);
                }

            }
        }

        static void SetThumbnail_3(string srcImgPath, string targetFolder)
        {
            //Configure JPEG Compression Engine   
            System.Drawing.Imaging.EncoderParameters encoderParams = new System.Drawing.Imaging.EncoderParameters();
            long[] quality = new long[1];
            quality[0] = 75;
            System.Drawing.Imaging.EncoderParameter encoderParam = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
            encoderParams.Param[0] = encoderParam;

            System.Drawing.Imaging.ImageCodecInfo[] arrayICI = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
            System.Drawing.Imaging.ImageCodecInfo jpegICI = null;
            for (int x = 0; x < arrayICI.Length; x++)
            {
                if (arrayICI[x].FormatDescription.Equals("JPEG"))
                {
                    jpegICI = arrayICI[x];
                    break;
                }
            }

            using (Bitmap source = new Bitmap(srcImgPath))
            {
                int wi, hi;
                wi = WIDTH;
                hi = HEIGHT;


                // maintain the aspect ratio despite the thumbnail size parameters   
                if (source.Width > source.Height)
                {
                    wi = WIDTH;
                    hi = (int)(source.Height * ((decimal)WIDTH / source.Width));
                }
                else
                {
                    hi = HEIGHT;
                    wi = (int)(source.Width * ((decimal)HEIGHT / source.Height));
                }

                // original code that creates lousy thumbnails   
                // System.Drawing.Image ret = source.GetThumbnailImage(wi,hi,null,IntPtr.Zero);   
                using (System.Drawing.Bitmap thumb = new Bitmap(wi, hi))
                {
                    using (Graphics g = Graphics.FromImage(thumb))
                    {
                        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                        g.FillRectangle(Brushes.White, 0, 0, wi, hi);
                        g.DrawImage(source, 0, 0, wi, hi);
                    }
                    string targetPath = Path.Combine(targetFolder, "th_3.jpg");
                    thumb.Save(targetPath, jpegICI, encoderParams);
                }

            }

        }
    }
}

使用c#生成高品质小空间的缩略图相关推荐

  1. [日推荐] 『KORJO母爱小空间』妈妈带宝宝出门再也不用愁啦!

    2019独角兽企业重金招聘Python工程师标准>>> 对于哺乳期妈妈们来说,带宝宝出门最大的问题就是哺乳和换尿布,虽然现在很多商场都配置了母婴室,但是走在路上,如果宝宝突然哭闹起来 ...

  2. 免费生成微信小程序的经验

    为了做小程序,我试过自己开发,也用过市面上的可以免费一键生成小程序的平台.对于新手来说还是有蛮多需要注意的地方,为避免大家走弯路,就跟大家分享一下我的一些关于免费生成微信小程序的经验. 1.小程序到底 ...

  3. 运用家居收纳储物空间 小空间变出大身材

    现代户型都不是太大,但大家的东西却是越来越多的.如何利用小空间,变出大收纳,是一个非常有趣的话题. 家中空间紧张,储物空间不够,别急,空间就像海绵里的水,只要你愿意挤总是会有的. 1.墙角设伸缩杆 角 ...

  4. 高品质静物空间海报模板PSD分层素材

    高品质静物空间海报模板PSD分层素材 在自然优雅光线的室内空间环境中展示您的摄影绘画作品,为您的工作增添更多氛围的好方 法. 非常适合作为创作背景和艺术绘画素材 (PSD文件)易于使用智能对象进行编辑 ...

  5. 上传txt生成字典 java_文件上传漏洞fuzz字典生成脚本小工具分享

    前言 学习xss的时候翻阅资料发现了一个文件上传漏洞fuzz字典生成脚本小工具,试了试还不错,分享一下 配置 需要python2环境 使用方法 $ python upload-fuzz-dic-bui ...

  6. 把个人网站封装生成百度小程序的方法分享

    现在百度大力发展移动端,所以百度智能小程序有一定的流量优势,还可以进入信息流和贴吧推广,同时还能获得网站快速收录权限,昨天已封装成功,今天跟大家分享把个人网站封装生成百度小程序的方法. 一.生成小程序 ...

  7. 全新圣诞节头像框制作生成微信小程序源码下载支持多模板

    一款可以制作圣诞帽头像的一款小程序 里面有多种模板选择,当然啦里面不只是可以制作圣诞帽 还可以制作贴图头像框,各种卡通,卡哇伊,男神女神标等等模板可以制作的 另外还支持检测你的手机型号,自动辨别手机真 ...

  8. 【有手就会系列】四步通过文字生成二次元小姐姐图片

    首先fork项目,启动环境选择16G的A100显卡,直接点击运行加载模型,接着就到了生成小姐姐的时候啦 你需要设置想生成的小姐姐的描述,由于模型是通过英文训练的,所以建议中文翻译成英文输入,填入你想要 ...

  9. 开发微信小程序,就是这么简单!可自动生成微信小程序源代码,配套JS SDK、接口和后台

    开发微信小程序,就是这么简单!自己动手,丰衣足食! 开发微信小程序有多简单?
 你只需要掌握前端开发,就可以轻松开发自己的微信小程序,实现自己的业务功能.借助果创云,无须域名.无须服务器.无须数据库, ...

最新文章

  1. 如何升级jdk_简述面试常见问题的锁升级与锁优化
  2. 会计电算化之Excel
  3. java common io_Java之Apache Commons-IO使用精讲
  4. 三心二意,助你好运?
  5. JS设置文本框只能是数字和小数点。
  6. markdown 转义字符
  7. syncthing下载_Syncthing中继服务器和发现服务器
  8. java中一个数轮流除去所有数_Java实现A、B两人轮流从盒中取球,取出球的数目必须是:1,3,7或者8个...
  9. nagios 监控memcached
  10. javascript 闭包理解总结
  11. 计算机硬盘被配制成动态磁盘。在这种情况下无法进行重装?,动态磁盘转换为基本磁盘(完美解决方案)...
  12. SEO实战密码:60天网站流量提高20倍(第2版)
  13. 目标检测中的常见指标
  14. CentOS 8 安装tc流量控制工具
  15. linux 符号执行,[原创]符号执行Symcc与模糊测试AFL结合实践
  16. C++——动态空间分配
  17. 2015阿里实习生面试
  18. 通报批评!985博导把审稿的文章拒了后当成自己的文章投!国家自然科学基金委通报批评...
  19. wxPython 2 - wxPython基础
  20. CV领域Transformer这一篇就够了(原理详解+pytorch代码复现)

热门文章

  1. java mongodb存base64_阿里JAVA面试分享经验【文末有福利】
  2. Ant Design 入门-引用自己命名的组件
  3. 2-Runtime objc_object objc_class
  4. 使用Powershell批量为Azure资源添加Tags
  5. 深度分析Java的枚举类型——枚举的线程安全性及序列化问题
  6. 使用CNN做文本分类——将图像2维卷积换成1维
  7. 友盟数据—值得手游创业者关注的玩家数据
  8. xp/2003开关3389指令
  9. UML部署图(转载)
  10. 语言模型自然语言处理[置顶] 哥伦比亚大学 自然语言处理 公开课 授课讲稿 翻译(四)...