欢迎来到山村网

C#图片压缩、生成缩略图、添加水印模块

2019-03-02 11:38:31浏览:193 来源:山村网   
核心摘要:  C#图片处理工具类,可以压缩JPG图像,图片自动生成缩略图,为图片添加水印效果等,返回高清缩略图,得到最佳的图片比例缩放

  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}

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

(责任编辑:豆豆)
下一篇:

C# MD5 加密解密 DES RC2 3DES AES等软创加密类

上一篇:

finger、who、w、users 命令作用及格式

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com