直接上代码。相信很多人会用到的。
调用该方法,最好直接用静态方法。不要类实例化来实例化去。累,编译器也累。
imagefrom代表来源图片,pathImageTo代表要保存的路径.
public static void GenThumbnail(Image imageFrom, string pathImageTo, int width, int height) { if (imageFrom == null) { return; } // 源图宽度及高度 int imageFromWidth = imageFrom.Width; int imageFromHeight = imageFrom.Height; // 生成的缩略图实际宽度及高度 int bitmapWidth = width; int bitmapHeight = height; // 生成的缩略图在上述"画布"上的位置 int X = 0; int Y = 0; // 根据源图及欲生成的缩略图尺寸,计算缩略图的实际尺寸及其在"画布"上的位置 if (bitmapHeight * imageFromWidth > bitmapWidth * imageFromHeight) { bitmapHeight = imageFromHeight * width / imageFromWidth; Y = (height - bitmapHeight) / 2; } else { bitmapWidth = imageFromWidth * height / imageFromHeight; X = (width - bitmapWidth) / 2; } // 创建画布 Bitmap bmp = new Bitmap(width, height); Graphics g = Graphics.FromImage(bmp); // 用白色清空 g.Clear(Color.White); // 指定高质量的双三次插值法。执行预筛选以确保高质量的收缩。此模式可产生质量最高的转换图像。 g.InterpolationMode = InterpolationMode.HighQualityBicubic; // 指定高质量、低速度呈现。 g.SmoothingMode = SmoothingMode.HighQuality; // 在指定位置并且按指定大小绘制指定的 Image 的指定部分。 g.DrawImage(imageFrom, new Rectangle(X, Y, bitmapWidth, bitmapHeight), new Rectangle(0, 0, imageFromWidth, imageFromHeight), GraphicsUnit.Pixel); try { //经测试 .jpg 格式缩略图大小与质量等最优 bmp.Save(pathImageTo, ImageFormat.Jpeg); } catch { } finally { //显示释放资源 bmp.Dispose(); g.Dispose(); } }
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
|
public
static
void
GenThumbnail
(
Image
imageFrom
,
string
pathImageTo
,
int
width
,
int
height
)
{
if
(
imageFrom
==
null
)
{
return
;
}
// 源图宽度及高度
int
imageFromWidth
=
imageFrom
.
Width
;
int
imageFromHeight
=
imageFrom
.
Height
;
// 生成的缩略图实际宽度及高度
int
bitmapWidth
=
width
;
int
bitmapHeight
=
height
;
// 生成的缩略图在上述"画布"上的位置
int
X
=
0
;
int
Y
=
0
;
// 根据源图及欲生成的缩略图尺寸,计算缩略图的实际尺寸及其在"画布"上的位置
if
(
bitmapHeight
*
imageFromWidth
>
bitmapWidth
*
imageFromHeight
)
{
bitmapHeight
=
imageFromHeight
*
width
/
imageFromWidth
;
Y
=
(
height
-
bitmapHeight
)
/
2
;
}
else
{
bitmapWidth
=
imageFromWidth
*
height
/
imageFromHeight
;
X
=
(
width
-
bitmapWidth
)
/
2
;
}
// 创建画布
Bitmap
bmp
=
new
Bitmap
(
width
,
height
)
;
Graphics
g
=
Graphics
.
FromImage
(
bmp
)
;
// 用白色清空
g
.
Clear
(
Color
.
White
)
;
// 指定高质量的双三次插值法。执行预筛选以确保高质量的收缩。此模式可产生质量最高的转换图像。
g
.
InterpolationMode
=
InterpolationMode
.
HighQualityBicubic
;
// 指定高质量、低速度呈现。
g
.
SmoothingMode
=
SmoothingMode
.
HighQuality
;
// 在指定位置并且按指定大小绘制指定的 Image 的指定部分。
g
.
DrawImage
(
imageFrom
,
new
Rectangle
(
X
,
Y
,
bitmapWidth
,
bitmapHeight
)
,
new
Rectangle
(
0
,
0
,
imageFromWidth
,
imageFromHeight
)
,
GraphicsUnit
.
Pixel
)
;
try
{
//经测试 .jpg 格式缩略图大小与质量等最优
bmp
.
Save
(
pathImageTo
,
ImageFormat
.
Jpeg
)
;
}
catch
{
}
finally
{
//显示释放资源
bmp
.
Dispose
(
)
;
g
.
Dispose
(
)
;
}
}
|