c# 无损高质量压缩图片代码

/// 无损压缩图片    
/// <param name="sFile">原图片</param>    
/// <param name="dFile">压缩后保存位置</param>    
/// <param name="dHeight">高度</param>    
/// <param name="dWidth"></param>    
/// <param name="flag">压缩质量(数字越小压缩率越高) 1-100</param>    
/// <returns></returns>    public static bool GetPicThumbnail(string sFile, string dFile, int dHeight, int dWidth, int flag)  
{  System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile);  ImageFormat tFormat = iSource.RawFormat;  int sW = 0, sH = 0;  //按比例缩放  Size tem_size = new Size(iSource.Width, iSource.Height);  if (tem_size.Width > dHeight || tem_size.Width > dWidth)  {  if ((tem_size.Width * dHeight) > (tem_size.Width * dWidth))  {  sW = dWidth;  sH = (dWidth * tem_size.Height) / tem_size.Width;  }  else  {  sH = dHeight;  sW = (tem_size.Width * dHeight) / tem_size.Height;  }  }  else  {  sW = tem_size.Width;  sH = tem_size.Height;  }  Bitmap ob = new Bitmap(dWidth, dHeight);  Graphics g = Graphics.FromImage(ob);  g.Clear(Color.WhiteSmoke);  g.CompositingQuality = CompositingQuality.HighQuality;  g.SmoothingMode = SmoothingMode.HighQuality;  g.InterpolationMode = InterpolationMode.HighQualityBicubic;  g.DrawImage(iSource, new Rectangle((dWidth - sW) / 2, (dHeight - sH) / 2, sW, sH), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel);  g.Dispose();  //以下代码为保存图片时,设置压缩质量    EncoderParameters ep = new EncoderParameters();  long[] qy = new long[1];  qy[0] = flag;//设置压缩的比例1-100    EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);  ep.Param[0] = eParam;  try  {  ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();  ImageCodecInfo jpegICIinfo = null;  for (int x = 0; x < arrayICI.Length; x++)  {  if (arrayICI[x].FormatDescription.Equals("JPEG"))  {  jpegICIinfo = arrayICI[x];  break;  }  }  if (jpegICIinfo != null)  {  ob.Save(dFile, jpegICIinfo, ep);//dFile是压缩后的新路径    
        }  else  {  ob.Save(dFile, tFormat);  }  return true;  }  catch  {  return false;  }  finally  {  iSource.Dispose();  ob.Dispose();  }  
}
 

转载于:https://www.cnblogs.com/1439107348s/p/7677962.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个从文本文件里“查找并替换”的功能

12345678910111213141516171819202122232425# -*- coding: UTF-8 -*-file input("请输入文件路径:") word1 input("请输入要替换的词:") word2 input("请输入新的词&#xff1a;") fopen(file,"r") AAAf.read() count 0 def BBB()…

机器学习算法之 KNN

K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了&#xff0c;在我们平常的生活中也会不自主的应用。比如&#xff0c;我们判断一个人的人品&#xff0c;只需要观察他来往最密切的几个人的人品好坏就可以得出了。这里就运用了KNN的思想。KNN方法既可以做分类&…

安装云端服务器操作系统,安装云端服务器操作系统

安装云端服务器操作系统 内容精选换一换SAP云服务器规格在申请SAP ECS之前&#xff0c;请参考SAP标准Sizing方法进行SAPS值评估&#xff0c;并根据Sizing结果申请云端ECS服务器资源&#xff0c;详细信息请参考SAP Quick Sizer。SAP 各组件最低硬盘空间、RAM&#xff0c;以及软件…

python 进度条_六种酷炫Python运行进度条

转自&#xff1a;一行数据阅读文本大概需要 3 分钟你的代码进度还剩多少&#xff1f;今天给大家介绍下目前6种比较常用的进度条&#xff0c;让大家都能直观地看到脚本运行最新的进展情况。1.普通进度条2.带时间进度条3.tpdm进度条4.progress进度条5.alive_progress进度条6.可视…

js 获取多少天前

getBeforeDate: function(day, str) { var now new Date().getTime(); //获取毫秒数 var before new Date(now - ((day > 0 && day ? day : 0) * 86400 * 1000)); var year before.getFullYear(); var month before.getMonth()1; var date before.getDate(); …

程序员的基本素质

给所有立志成为程序员的朋友 以及 自勉之&#xff01; 程序员基本素质&#xff1a; 作一个真正合格的程序员&#xff0c;或者说就是可以真正合格完成一些代码工作的程序员&#xff0c;应该具有的素质。 1&#xff1a;团队精神和协作能力 把它作为基本素质&#xff0c;并…

权限之浅理解

白马过隙&#xff0c;在感叹时光流逝的同时不得不承认在学习中随着知识面的不断扩展所接受的东西也越来越多&#xff0c;尤其是那些外形比较容易混淆的命令&#xff0c;着实让作为新手的吃了很多苦头&#xff0c;趁着学习紧张之时偷个懒整理这周易混淆的命令&#xff1a; chgrp…

机器学习算法之生成树

一、什么是决策树&#xff1f; 决策树&#xff08;Decision Tree&#xff09;是一种基本的分类和回归的方法。 分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点&#xff08;node&#xff09;和有向边&#xff08;directed edge&#xff09;组成。结点有两种…

强烈推荐给从事IT业的同行们 (转载)

作者&#xff1a;李学凌 文章来源&#xff1a;bbs.ustc.edu.cn 中国有很多小朋友&#xff0c;他们18,9岁或21,2岁&#xff0c;通过自学也写了不少代码&#xff0c;他们有的代码写的很漂亮&#xff0c;一些技术细节相当出众&#xff0c;也很有钻研精神&#xff0c;但是他…

微机原理控制转移类指令

1.无条件跳转指令 指令格式;JMP 目标地址 功能&#xff1a;JMP可以使程序无条件地跳转到程序存储器中某目标地址 注意点&#xff1a; 1&#xff09;指令目标地址若在JMP指令所在的代码段内&#xff0c;属段内跳转&#xff0c;指令只修改IP内容。指令目标地址若在JMP指令所在的代…

OPENNMS的后台并行管理任务

Concurrent management tasks: 1. . Action daemon - automated action (work flow)2. .数据采集Collection daemon - collects data3. .能力检查Capability daemon - capability check on nodes4. .动态主机配置协议DHCP daemon - DHCP clien…

机器学习算法之集成学习

集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器。弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测的分类器(errorrate < 0.5)。 集成算法的成功在于保证弱分类器的多样性(Diversity)。而且集成不稳定的算法也能够得到一个比较明显…

常用的方法论-NPS

转载于:https://www.cnblogs.com/qjm201000/p/7687510.html

controller调用controller的方法_SpringBoot 优雅停止服务的几种方法

转自&#xff1a;博客园&#xff0c;作者&#xff1a;黄青石www.cnblogs.com/huangqingshi/p/11370291.html 在使用 SpringBoot 的时候&#xff0c;都要涉及到服务的停止和启动&#xff0c;当我们停止服务的时候&#xff0c;很多时候大家都是kill -9 直接把程序进程杀掉&#x…

linux下安装Oracle10g时,安装rpm文件的技巧 (rpm -Uvh package名)

rpm -q package名 &#xff1a; 查询该package是否已经被安装了rpm -qa | grep package名 或是package 的关键字 &#xff1a; 查询该package是否已经被安装了rpm -Uvh package名 &#xff1a; 意思是update packagerpm -Uvh package名 --force &#xff1a; 意思是如果该…

机器学习之聚类概述

什么是聚类 聚类就是对大量未知标注的数据集&#xff0c;按照数据 内部存在的数据特征 将数据集划分为 多个不同的类别 &#xff0c;使 类别内的数据比较相似&#xff0c;类别之间的数据相似度比较小&#xff1b;属于 无监督学习。 聚类算法的重点是计算样本项之间的 相似度&…

程序员-建立你的商业意识 闫辉 著

1 程序员为什么需要商业意识 几 年前&#xff0c;当我刚刚认识Fishman的时候&#xff0c;听到他神奇的创业经历&#xff0c;觉得非常不可思议。甚至还专门写了一篇报道发到《电脑报》上&#xff0c;题目是《从程序员到 CEO》。不久&#xff0c;Fishman将创建的又一个新公司…

qt release打包发布_几种解决Qt程序打包后无法连接数据库问题的方法

Qt是一个跨平台C图形用户界面应用程序开发框架&#xff0c;使用它不仅可以方便地开发GUI程序&#xff0c;也可以开发非GUI程序&#xff0c;可以一次编写&#xff0c;处处编译。今天遇到的问题比较怪异&#xff0c;我开发的是一个桌面版订单管理系统&#xff0c;整体架构就是一个…

Java操作MongoDB

先引入mongo-java-dirver驱动 123456<!-- mongo-java-dirver --><dependency><groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.4.2</version> </dependency>代码操作演示&#…

机器学习之拉格朗日乘子法和 KKT

有约束的最优化问题 最优化问题一般是指对于某一个函数而言&#xff0c;求解在其指定作用域上的全局最小值问题&#xff0c;一般分为以下三种情况(备注&#xff1a;以下几种方式求出来的解都有可能是局部极小值&#xff0c;只有当函数是凸函数的时候&#xff0c;才可以得到全局…