C#图片压缩、生成缩略图、添加水印模块
来源: 阅读:959 次 日期:2014-08-20 14:43:57
温馨提示: 小编为您整理了“C#图片压缩、生成缩略图、添加水印模块”,方便广大网友查阅!

C#图片处理工具类,可以压缩JPG图像,图片自动生成缩略图,为图片添加水印效果等,返回高清缩略图,得到最佳的图片比例缩放尺寸,并获取图片类型等,类代码如下:

view sourceprint?001using System;

002using System.Collections.Generic;

003using System.Linq;

004using System.Text;

005using System.IO;

006using System.Drawing;

007using System.Drawing.Drawing2D;

008using System.Drawing.Imaging;

009namespace CLB.Utility.Tools

010{

011 ///

012 /// 图片工具类

013 ///

014 public static class ImageHelper

015 {

016 ///

017 /// 压缩JPG图片

018 ///

019 /// 压缩后图片存放的地址

020 /// 需要压缩的图片地址

021 /// 压缩质量:如果为0则默认调整为80

022 public static void SetCompressImage(string NewfileName, string OldfileName, long quality)

023 {

024 if (quality == 0)

025 {

026 quality = 80;

027 }

028 using (Bitmap bitmp = new Bitmap(OldfileName))

029 {

030 EncoderParameters ep = new EncoderParameters(1);

031 ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);

032 ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/jpeg");

033 bitmp.Save(NewfileName, myImageCodecInfo, ep);

034 bitmp.Dispose();

035 }

036 }

037 ///

038 /// 返回高清缩略图

039 ///

040 /// 原文件

041 /// 新文件

042 /// 最大高度

043 /// 最大宽度

044 /// 质量,如果为0,则设为80

045 public static void SetGoodImage(string fileName, string newFile, int maxHeight, int maxWidth,longqualitys)

046 {

047 if (qualitys == 0)

048 {

049 qualitys = 80;

050 }

051 using (System.Drawing.Image img = System.Drawing.Image.FromFile(fileName))

052 {

053 System.Drawing.Imaging.ImageFormat

054 thisFormat = img.RawFormat;

055 Size newSize = NewSize(maxWidth, maxHeight, img.Width, img.Height);

056 Bitmap outBmp = new Bitmap(newSize.Width, newSize.Height);

057 Graphics g = Graphics.FromImage(outBmp);

058 // 设置画布的描绘质量

059 g.CompositingQuality = CompositingQuality.HighQuality;

060 g.SmoothingMode = SmoothingMode.HighQuality;

061 g.InterpolationMode = InterpolationMode.HighQualityBicubic;

062 g.DrawImage(img, new Rectangle(0, 0, newSize.Width, newSize.Height),

063 0, 0, img.Width, img.Height, GraphicsUnit.Pixel);

064 g.Dispose();

065 // 以下代码为保存图片时,设置压缩质量

066 EncoderParameters encoderParams = new EncoderParameters();

067 long[] quality = new long[1];

068 quality[0] = qualitys;

069 EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);

070 encoderParams.Param[0] = encoderParam;

071 //获得包含有关内置图像编码解码器的信息的ImageCodecInfo 对象.

072 ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();

073 ImageCodecInfo jpegICI = null;

074 for (int x = 0;

075 x < arrayICI.Length;

076 x++)

077 {

078 if (arrayICI[x].FormatDescription.Equals("JPEG"))

079 {

080 jpegICI = arrayICI[x];

081 //设置JPEG编码

082 break;

083 }

084 }

085 if (jpegICI != null)

086 {

087 outBmp.Save(newFile, jpegICI, encoderParams);

088 }

089 else

090 {

091 outBmp.Save(newFile, thisFormat);

092 }

093 img.Dispose();

094 outBmp.Dispose();

095 }

096 }

097 // 得到到按比例最佳尺寸

098 private static Size NewSize(int maxWidth, int maxHeight, int width, int height)

099 {

100 double w = 0.0;

101 double h = 0.0;

102 double sw = Convert.ToDouble(width);

103 double sh = Convert.ToDouble(height);

104 double mw = Convert.ToDouble(maxWidth);

105 double mh = Convert.ToDouble(maxHeight);

106 if (sw < mw && sh < mh)

107 {

108 w = sw;

109 h = sh;

110 }

111 else if ((sw / sh) > (mw / mh))

112 {

113 w = maxWidth;

114 h = (w * sh) / sw;

115 }

116 else

117 {

118 h = maxHeight;

119 w = (h * sw) / sh;

120 }

121 return new Size(Convert.ToInt32(w), Convert.ToInt32(h));

122 }

123 ///

124 /// 得到图片类型

125 ///

126 ///

127 ///

128 private static ImageCodecInfo GetEncoderInfo(String mimeType)

129 {

130 int j;

131 ImageCodecInfo[] encoders;

132 encoders = ImageCodecInfo.GetImageEncoders();

133 for (j = 0; j < encoders.Length; ++j)

134 {

135 if (encoders[j].MimeType == mimeType)

136 return encoders[j];

137 }

138 return null;

139 }

140 ///

141 /// 添加水印效果

142 ///

143 /// 输入路径

144 /// 输出路径

145 /// 水印文件路径

146 /// 水印靠近图片右边的像素

147 /// 水印靠近底边的像素

148 /// 透明度

149 public static void SetWaterMark( string fileName, string newfileName,string WaterImg,int RightSpace,intBottomSpace,int LucencyPercent)

150 {

151 using (System.Drawing.Image image = System.Drawing.Image.FromFile(fileName))

152 {

153 ImageModification wm = new ImageModification();

154 wm.DrawedImagePath = WaterImg; //水印图片

155 wm.ModifyImagePath = fileName; //图片的路径

156 wm.RightSpace = RightSpace; //水印位置

157 wm.BottoamSpace = image.Height - BottomSpace; //水银位置

158 wm.LucencyPercent = LucencyPercent; //透明度

159 wm.OutPath = newfileName; //生成的文件名

160 wm.DrawImage();

161 image.Dispose();

162 }

163 }

164 }

165}

注:更多精彩文章请关注三联编程教程栏目。

更多信息请查看IT技术专栏

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map