昨天碰到一个很奇怪的事情,在最近的一个项目有这样的一个需求,把上传的图片进行压缩,避免因图片过大而影响浏览速度。
代码也很简单三两句就可以实现了,但发现压缩后的图片,虽然有变小,但还不是很明显。
代码如下:
01 |
public void CreateThumbnailImage() |
02 |
{ |
03 |
Image img = Image.FromFile("e:/1.jpg"); |
04 |
Image.GetThumbnailImageAbort cb = new Image.GetThumbnailImageAbort(CallBack); |
05 |
Image thumbnailImage = img.GetThumbnailImage(120, 120, cb, System.IntPtr.Zero); |
06 |
thumbnailImage.Save("e:/2.jpg"); |
07 |
} |
08 |
public bool CallBack() |
09 |
{ |
10 |
return false; |
11 |
} |
本来是一张大约800*700的图片(80kb),压缩到120*110左右的图片,大小应该在10kb以内,但我却发现压缩后的图片却有45kb。有个别的图片压缩后反而比原来的更大,而且用网页打开也无法显示。
后来查了一下相关的文档,发现.net在保存图片时,是以png默认的格式来保存,我想问题应该就是出在这了,还是试试吧。
01 |
//获得缩略图 |
02 |
public void CreateThumbnailImage() |
03 |
{ |
04 |
string imgFile = "e:/1.jpg"; |
05 |
Image img = Image.FromFile(imgFile); |
06 |
Image.GetThumbnailImageAbort cb = new Image.GetThumbnailImageAbort(CallBack); |
07 |
Image thumbnailImage = img.GetThumbnailImage(120, 120, cb, System.IntPtr.Zero); |
08 |
string extendName = imgFile.Substring(imgFile.LastIndexOf(".") + 1); |
09 |
ImageFormat imgFormat = GetImageFormat(extendName); |
10 |
thumbnailImage.Save("e:/2.jpg",imgFormat); |
11 |
} |
12 |
public bool CallBack() |
13 |
{ |
14 |
return false; |
15 |
} |
16 |
//获得图片格式 |
17 |
private static ImageFormat GetImageFormat(String extendName) |
18 |
{ |
19 |
extendName = extendName.ToLower(); |
20 |
if (extendName == "gif") |
21 |
{ |
22 |
return ImageFormat.Gif; |
23 |
} |
24 |
else if (extendName == "jpg" || extendName == "jpeg") |
25 |
{ |
26 |
return ImageFormat.Jpeg; |
27 |
} |
28 |
else if (extendName == "bmp") |
29 |
{ |
30 |
return ImageFormat.Bmp; |
31 |
} |
32 |
else if (extendName == "wmf") |
33 |
{ |
34 |
return ImageFormat.Emf; |
35 |
} |
36 |
else if (extendName == "exif") |
37 |
{ |
38 |
return ImageFormat.Exif; |
39 |
} |
40 |
else if (extendName == "icon") |
41 |
{ |
42 |
return ImageFormat.Icon; |
43 |
} |
44 |
else if (extendName == "tiff") |
45 |
{ |
46 |
return ImageFormat.Tiff; |
47 |
} |
48 |
else |
49 |
{ |
50 |
return ImageFormat.Png; |
51 |
} |
52 |
} |
还真的是这样,压缩后的图片大小就只有4.6kb。
压缩注意事项:
1、压缩图片要指定保存的格式,虽然保存后图片名称是对的,但图片还是很大,而且在网页上还无法显示。
2、对于图片格式为gif且为透明的图片,如果压缩后要保留透明的,那压缩的格式就要用png的,而且图片的扩展名也为png,若压缩成gif的格式,它无法保留透明的部分。
浙公网安备 33010602011771号