1. /// <summary>
  2. /// 创建缩略图
  3. /// </summary>
  4. /// <param name="srcFileName"></param>
  5. /// <param name="destFileName"></param>
  6. private static void CreateThumbnailImage(string srcFileName, string destFileName)
  7. {
  8. using (var img = new Bitmap(srcFileName))
  9. {
  10. Size originalSize = new Size(img.Width, img.Height);
  11. Size targetSize = new Size(, );
  12. targetSize = CalculateNewImageSize(originalSize, targetSize);
  13. using (
  14. var bitmap = new Bitmap(targetSize.Width, targetSize.Height, PixelFormat.Format32bppArgb))
  15. {
  16. using (Graphics g = Graphics.FromImage(bitmap))
  17. {
  18. g.InterpolationMode = InterpolationMode.Low;
  19. using (var wrapmode = new ImageAttributes())
  20. {
  21. wrapmode.SetWrapMode(WrapMode.TileFlipXY);
  22. g.DrawImage(img, new Rectangle(, , targetSize.Width, targetSize.Height),
  23. , ,
  24. img.Width,
  25. img.Height,
  26. GraphicsUnit.Pixel,
  27. wrapmode);
  28. }
  29. }
  30. bitmap.Save(destFileName);
  31. }
  32. }
  33. }
  34.  
  35. /// <summary>
  36. /// 计算缩略图的尺寸
  37. /// </summary>
  38. /// <param name="originalSize"></param>
  39. /// <param name="targetSize"></param>
  40. /// <returns></returns>
  41. private static Size CalculateNewImageSize(Size originalSize, Size targetSize)
  42. {
  43. if (originalSize.Width <= targetSize.Width&&
  44. originalSize.Height<=targetSize.Height)
  45. {
  46. //目标尺寸比原尺寸大,那么直接使用原尺寸
  47. return originalSize;
  48. }
  49.  
  50. double targetRatio = GetRatio(targetSize);
  51. double originalRatio = GetRatio(originalSize);
  52.  
  53. var size = new Size(targetSize.Width, targetSize.Height);
  54.  
  55. if (originalRatio < targetRatio)
  56. {
  57. size.Width = (originalSize.Width*targetSize.Height)/originalSize.Height;
  58. }
  59. else
  60. {
  61. size.Height = (originalSize.Height*targetSize.Width)/originalSize.Width;
  62. }
  63.  
  64. return size;
  65. }
  66.  
  67. private static double GetRatio(Size size)
  68. {
  69. return (double) size.Width/size.Height;
  70. }

支持大文件的缩略图,800M的bmp图片缩放到300*300大概100kb左右

c# 创建缩略图的更多相关文章

  1. PHP 创建缩略图

    一.成比例缩小图像 <?php /* 创建缩略图 */ $file = __DIR__.'/button.png'; $scale = 0.5; // 比例 $image = ImageCrea ...

  2. php 使用GD库上传图片以及创建缩略图

    php 使用GD库上传图片以及创建缩略图   GD库是PHP进行图象操作一个很强大的库. 先在php.ini里增加一行引用:extension=php_gd2.dll 重启apache.做一个测试页 ...

  3. 使用GDI+轻松创建缩略图

    Gdi+ 还是相当好用的. 1> Image保存图像,需要一个CLSID的参数,它可以这样获得: int   GetEncoderClsid(const   WCHAR*   format,   ...

  4. Win+PHP+IECapt完整实现网页批量截图并创建缩略图

    最近在开发一个本地互联网应用的项目,为了增加用户体验,需要在搜索结果左侧显示如图一所示的某个网站的缩略图效果,在网上不停地百度谷歌了一上午后,发现大多数实现少量截图还是可以的,如果大批量的截图总会在中 ...

  5. JavaScript with Image:创建缩略图

    当图片很大,直接把图片从Server下载到浏览器上看是一种很不明智的做法,浪费了服务器的资源,网络带宽和客户端的资源.所以,通常Server和Client之间会传输缩略图,只有当Client请求某张图 ...

  6. python创建缩略图和选择轮廓效果

    # -*- encoding:utf-8 -*- ''' 改变颜色 --- 颜色反转''' from PIL import Image nest = Image.open("D:\\tk.j ...

  7. 使用 Amazon S3 触发器创建缩略图

    使用 Amazon S3 触发器创建缩略图 环境 centos (注意,必须是Linux环境) node12.x 安装教程 curl -sL https://rpm.nodesource.com/se ...

  8. scrapy下载图片到自己的目录,创建缩略图,存储入库

    环境和工具:python2.7,scrapy 实验网站:http://www.27270.com/tag/333.html  爬去所有兔女郎图片,下面的推荐需要过滤 逻辑:分析网站信息,下载图片和入库 ...

  9. JS创建缩略图

    <script language="javascript"> //显示缩略图 function DrawImage(ImgD,width_s,height_s){ /* ...

随机推荐

  1. java程序实现Unicode码和中文互相转换

      根据前一篇的补充问题http://blog.csdn.net/fancylovejava/article/details/10142391 有了前一篇文章的了解,大概了解了unicode编码格式了 ...

  2. linux下tomcat的配置及项目的部署流程

    Java的安装配置 1. 在/etc/profile文件中配置相应的信息(如下) export JAVA_HOME=/usr/java/jdk1.6.0_20 export JRE_HOME=/usr ...

  3. linux安全相关

    2017-05-11突然谈到linux安全相关的话题,记录一下 搜了一下,找到一篇介绍apparmor和selinux的文章 http://www.361way.com/apparmor-selinu ...

  4. SrpingCloud 之SrpingCloud config分布式配置中心

    Config架构 当一个系统中的配置文件发生改变的时候,我们需要重新启动该服务,才能使得新的配置文件生效,spring cloud config可以实现微服务中的所有系统的配置文件的统一管理,而且还可 ...

  5. Add Tags to Neutron Resources

    给一个network加上tag,用来: Ability to map different networks in different OpenStack locations to one logica ...

  6. Linux下查看Python安装了哪些脚本模块

    Linux下查看Python安装了哪些脚本模块 1.什么是rpm ? rpm 即RedHat Package Management,是RedHat的发明之一 .现在包括OpenLinux.fedora ...

  7. java学习进度条四

  8. 理解javascript this 值

    如何确定this的值 this值会被传递给所有函数,this的值是基于运行时调用函数的上下文. 例如:从全局作用域调用sayFoo函数时,this引用window对象 当它作为myObject的一种方 ...

  9. 快速构建hibernate框架

    手动配置Hibernate框架的配置,极易出现问题,在Eclipse的web项目中,我们可以快速配置,方便快捷 一.导入Hibernate框架所需要的jar文件 二. 窗口—Perspective—打 ...

  10. php-fpm进程内存泄漏

    线上服务器内存报警 线上web8G内存的服务器,内存几乎吃光,top查看,发现php-fpm进程每个都是几十M,php-fpm配置static, 一共150个 解决 排除过程中,其他机器相同配置都没有 ...