/// <summary>
/// 根据指定尺寸得到按比例缩放的尺寸,返回true表示以更改尺寸
/// </summary>
/// <param name="picWidth">图片宽度</param>
/// <param name="picHeight">图片高度</param>
/// <param name="specifiedWidth">指定宽度</param>
/// /// <param name="specifiedHeight">指定高度</param>
/// <returns>返回true表示以更改尺寸</returns>
private bool GetPicZoomSize(ref int picWidth, ref int picHeight, int specifiedWidth, int specifiedHeight)
{
int sW = 0, sH = 0;
Boolean isZoomSize = false;
//按比例缩放
Size tem_size = new Size(picWidth, picHeight);
if (tem_size.Width > specifiedWidth || tem_size.Height > specifiedHeight) //将**改成c#中的或者操作符号
{
if ((tem_size.Width * specifiedHeight) > (tem_size.Height * specifiedWidth))
{
sW = specifiedWidth;
sH = (specifiedWidth * tem_size.Height) / tem_size.Width;
}
else
{
sH = specifiedHeight;
sW = (tem_size.Width * specifiedHeight) / tem_size.Height;
}
isZoomSize = true;
}
else
{
sW = tem_size.Width;
sH = tem_size.Height;
}
picHeight = sH;
picWidth = sW;
return isZoomSize;
}
/// <summary>
/// 无损压缩图片
/// </summary>
/// <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 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 = iSource.Width, sH = iSource.Height; GetPicZoomSize(ref sW, ref sH, dWidth, dHeight); 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(); }
}

缩放图片也会改变图片大小

最新文章

  1. HTML 接收本地文件
  2. Leetcode 255. Verify Preorder Sequence in Binary Search Tree
  3. 在github上写个人简历——先弄个主页
  4. form上传文件以及跨域异步上传
  5. 转: https 单向双向认证说明_数字证书, 数字签名, SSL(TLS) , SASL
  6. Nodejs v4.x.0API文档学习(2)Assert断言测试模块
  7. Delphi 服务操作
  8. linxu添加定时任务
  9. [LeetCode203]Remove Linked List Elements
  10. 方向梯度直方图(HOG)和颜色直方图的一些比較
  11. Entity Framework技巧系列之六 - Tip 20 – 25
  12. (iOS)私有API的使用(原创)
  13. Python中进程
  14. Vivado怎么使用In system debug(类似于chipscope的东西)
  15. maven 项目连接mysql8.0版本时的注意事项
  16. 6. CountDownLatch 闭锁
  17. 扩展Linux磁盘空间
  18. c++与java的几个不同点
  19. SQL Server2008 R2 数据库镜像实施手册(双机)SQL Server2014同样适用
  20. JAVA的初始化顺序:

热门文章

  1. HDU - 3282 优先队列的使用
  2. 最新版gradle安装使用简介
  3. Jmeter入门使用
  4. 洛谷 P4143 采集矿石 后缀数组
  5. Kerberos原理经典对话
  6. Bootstrap导航组件
  7. 关于 TCP 三次握手和四次挥手,满分回答在此
  8. Linux Bash Script conditions
  9. Mac 开机时为什么突然响一下,duang
  10. VS Code Extension