话不多说,请看代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
/// <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();
}
}
|
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持服务器之家!
原文链接:http://www.cnblogs.com/tpfOfBlog/archive/2017/04/12/6700431.html