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}

时间: 2024-08-02 20:47:51

C#图片压缩、生成缩略图、添加水印模块的相关文章

C#图片切割、图片压缩、缩略图生成代码汇总_C#教程

本文为大家整理了C#图片切割.图片压缩.缩略图生成的实现代码,大家可以收藏,方便以后使用,具体内容如下 /// 图片切割函数 /// </summary> /// <param name="sourceFile">原始图片文件</param> /// <param name="xNum">在X轴上的切割数量</param> /// <param name="yNum">在Y轴

Nginx服务器中用于生成缩略图的模块配置教程_nginx

ngx_image_thumb模块生成缩略图 ngx_image_thumb是nginx中用来生成缩略图的模块,生存缩略图的方法很多,本nginx模块主要功能是对请求的图片进行缩略/水印处理,支持文字水印和图片水印.支持自定义字体,文字大小,水印透明度,水印位置,判断原图是否是否大于指定尺寸才处理等等.1. 编译方法编译前请确认您的系统已经安装了libcurl-dev libgd2-dev libpcre-dev 依赖库1.1 Debian / Ubuntu 系统举例 # 如果你没有安装GCC相

php-关于安卓客户端向服务器传送图片并生成缩略图的问题

问题描述 关于安卓客户端向服务器传送图片并生成缩略图的问题 我本来是在安卓客户端生成缩略图的,然后和原图一起发送到服务器,现在改用在服务器端用php生成缩略图,本机实验成功,但是如果是客户端传来的图片,只能保存原图,不能用服务器生成缩略图.我判断了一下,因为生成缩略图要用$src_image=ImageCreateFromBMP($uploads_dir.$uploadname)来调用原图,是不是因为客户端向服务器端发送时,原图还未上传好就调用原图引发错误了?可是我已经加了一个if(move_u

PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF_php实例

给骨头系统开发的图像库的 imagick 部分 ,支持 gif , 完美支持裁切.生成缩略图.添加水印 . 支持按方位生成缩略图像, 如: // 把左上角优先 $image->resize_to(100, 100, 'north_west'); // 右边优先 $image->resize_to(100, 100, 'east'); ... 更多参数看源代码 原图 效果图: 调用方式: include 'imagick.class.php'; $image = new lib_image_im

支持png透明图片的php生成缩略图类分享_php技巧

注:此功能依赖GD2图形库 最近要用php生成缩略图,在网上找了一下,发现了这篇文章:PHP生成图片缩略图 试用了一下后,发现有这样几个问题: 1.png图片生成的缩略图是jpg格式的 2.png图片生成的缩略图没有了透明(半透明)效果(填充了黑色背景) 3.代码语法比较老 因此,在这个版本的基础上简单修改优化了一下. PHP生成缩略图类 <?php /* * desc: Resize Image(png, jpg, gif) * author: 十年后的卢哥哥 * date: 2014.11.

php动态生成缩略图并输出显示的方法

    下面为你介绍了php动态生成缩略图并输出显示的方法,涉及php操作图片的相关技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了php动态生成缩略图并输出显示的方法.分享给大家供大家参考.具体如下: 调用方法: ? 1 <img src="thumbs.php?filename=photo.jpg&width=100&height=100"> 此代码可以为大图片动态生成缩略图显示,图片在内存中生成,不在硬盘生成真实文件 thumbs.php文

php动态生成缩略图并输出显示的方法_php技巧

本文实例讲述了php动态生成缩略图并输出显示的方法.分享给大家供大家参考.具体如下: 调用方法: <img src="thumbs.php?filename=photo.jpg&width=100&height=100"> 此代码可以为大图片动态生成缩略图显示,图片在内存中生成,不在硬盘生成真实文件 thumbs.php文件如下: <?php $filename= $_GET['filename']; $width = $_GET['width'];

给图片添加水印(支持中文)并生成缩略图

缩略图|中文 <? // **************************************** // // 功能:给图片添加水印(支持中文)并生成缩略图 // 参数: $srcFile 图片文件名 // $dstFile 另存图片文件名 // $markwords 水印文字内容 // $markimage 水印图片地址 // $dstW 图片保存宽度 // $dstH 图片保存高度 // $rate 图片保存品质 // ********************************

android-安卓图片上传生成缩略图,裁剪后背景为黑色。

问题描述 安卓图片上传生成缩略图,裁剪后背景为黑色. 用户在上传图片后图片可能会自定义,不一定为最大,如果为黑色的话,会影响用户体验. 请问我要如何做成透明的. 解决方案 http://zhidao.baidu.com/link?url=vqPoNNcVjXD2Lsb57JMZSuJd3gH8rfpJpr9iItIPZ7_PQ__8-rSho89hBSKpKCj--1e9x5S3oQpcc2zHXk1H-QaXFhA4BtI-X6GJdJxGeOK 解决方案二: 裁剪保存的时候注意压缩质量,最好