.net等比缩放生成缩略图的方法

2025-05-29 0 109

生成缩略图是一个十分常用功能,找到了一个方法,重写部分代码,实用又好用,.net又一个生成缩略图的方法,不变形

?

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
/// <summary>

/// 为图片生成缩略图

/// </summary>

/// <param name="phyPath">原图片的路径</param>

/// <param name="width">缩略图宽</param>

/// <param name="height">缩略图高</param>

/// <returns></returns>

public System.Drawing.Image GetHvtThumbnail(System.Drawing.Image image, int width, int height)

{

Bitmap m_hovertreeBmp = new Bitmap(width, height);

//从Bitmap创建一个System.Drawing.Graphics

Graphics m_HvtGr = Graphics.FromImage(m_hovertreeBmp);

//设置

m_HvtGr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

//下面这个也设成高质量

m_HvtGr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

//下面这个设成High

m_HvtGr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

//把原始图像绘制成上面所设置宽高的缩小图

Rectangle rectDestination = new Rectangle(0, 0, width, height);

int m_width, m_height;

if (image.Width * height > image.Height * width)

{

m_height = image.Height;

m_width = (image.Height * width) / height;

}

else

{

m_width = image.Width;

m_height = (image.Width * height) / width;

}

m_HvtGr.DrawImage(image, rectDestination, 0, 0, m_width, m_height, GraphicsUnit.Pixel);

return m_hovertreeBmp;

}

C#缩略图生成类,采用高质量插值法实现缩略图生成,高质量,低速度呈现平滑程度,可以保持缩略图纵横比,在获取缩略图的时候一开始就根据百分比获取图片的尺寸、根据设定的大小返回图片的大小,并高质量保存缩略图图片,为原图片设置EncoderParameters 对象。

以下为类文件,建议保存文件名为:ImageHelper.cs

?

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

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130
using System;

using System.Collections.Generic;

using System.Drawing;

using System.Drawing.Imaging;

namespace HtmlSnap

{

public static class ImageHelper

{

/// 获取缩略图

public static Image GetThumbnailImage(Image image, int width, int height)

{

if (image == null || width < 1 || height < 1)

return null;

// 新建一个bmp图片

Image bitmap = new System.Drawing.Bitmap(width, height);

// 新建一个画板

using (Graphics g = System.Drawing.Graphics.FromImage(bitmap))

{

// 设置高质量插值法

g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

// 设置高质量,低速度呈现平滑程度

g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

// 高质量、低速度复合

g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

// 清空画布并以透明背景色填充

g.Clear(Color.Transparent);

// 在指定位置并且按指定大小绘制原图片的指定部分

g.DrawImage(image, new Rectangle(0, 0, width, height),

new Rectangle(0, 0, image.Width, image.Height),

GraphicsUnit.Pixel);

return bitmap;

}

}

/// <summary>

/// 生成缩略图,并保持纵横比

/// </summary>

/// <returns>生成缩略图后对象</returns>

public static Image GetThumbnailImageKeepRatio(Image image, int width, int height)

{

Size imageSize = GetImageSize(image, width, height);

return GetThumbnailImage(image, imageSize.Width, imageSize.Height);

}

/// <summary>

/// 根据百分比获取图片的尺寸

/// </summary>

public static Size GetImageSize(Image picture, int percent)

{

if (picture == null || percent < 1)

return Size.Empty;

int width = picture.Width * percent / 100;

int height = picture.Height * percent / 100;

return GetImageSize(picture, width, height);

}

/// <summary>

/// 根据设定的大小返回图片的大小,考虑图片长宽的比例问题

/// </summary>

public static Size GetImageSize(Image picture, int width, int height)

{

if (picture == null || width < 1 || height < 1)

return Size.Empty;

Size imageSize;

imageSize = new Size(width, height);

double heightRatio = (double)picture.Height / picture.Width;

double widthRatio = (double)picture.Width / picture.Height;

int desiredHeight = imageSize.Height;

int desiredWidth = imageSize.Width;

imageSize.Height = desiredHeight;

if (widthRatio > 0)

imageSize.Width = Convert.ToInt32(imageSize.Height * widthRatio);

if (imageSize.Width > desiredWidth)

{

imageSize.Width = desiredWidth;

imageSize.Height = Convert.ToInt32(imageSize.Width * heightRatio);

}

return imageSize;

}

/// <summary>

/// 获取图像编码解码器的所有相关信息

/// </summary>

/// <param name="mimeType">包含编码解码器的多用途网际邮件扩充协议 (MIME) 类型的字符串</param>

/// <returns>返回图像编码解码器的所有相关信息</returns>

public static ImageCodecInfo GetCodecInfo(string mimeType)

{

ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();

foreach (ImageCodecInfo ici in CodecInfo)

{

if (ici.MimeType == mimeType) return ici;

}

return null;

}

public static ImageCodecInfo GetImageCodecInfo(ImageFormat format)

{

ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();

foreach (ImageCodecInfo icf in encoders)

{

if (icf.FormatID == format.Guid)

{

return icf;

}

}

return null;

}

public static void SaveImage(Image image, string savePath, ImageFormat format)

{

SaveImage(image, savePath, GetImageCodecInfo(format));

}

/// <summary>

/// 高质量保存图片

/// </summary>

private static void SaveImage(Image image, string savePath, ImageCodecInfo ici)

{

// 设置 原图片 对象的 EncoderParameters 对象

EncoderParameters parms = new EncoderParameters(1);

EncoderParameter parm = new EncoderParameter(Encoder.Quality, ((long)95));

parms.Param[0] = parm;

image.Save(savePath, ici, parms);

parms.Dispose();

}

}

}

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 .net等比缩放生成缩略图的方法 https://www.kuaiidc.com/102587.html

相关文章

发表评论
暂无评论