C#.NET 添加图片水印

 

 
  
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;

namespace Pub.Class
{
/// <summary>
/// 添加水印类 只支持添加图片水印
/// </summary>
public class Watermark
{
#region 私有成员
private string modifyImagePath = null ;
private string drawedImagePath = null ;
private int rightSpace;
private int bottoamSpace;
private int lucencyPercent = 70 ;
private string outPath = null ;
#endregion

#region 构造器
/// <summary>
/// 构造函数
/// </summary>
public Watermark() { }
#endregion

#region 属性
/// <summary>
/// 获取或设置要修改的图像路径
/// </summary>
public string ModifyImagePath
{
get { return this .modifyImagePath;}
set { this .modifyImagePath = value;}
}
/// <summary>
/// 获取或设置在画的图片路径(水印图片)
/// </summary>
public string DrawedImagePath
{
get { return this .drawedImagePath;}
set { this .drawedImagePath = value;}
}
/// <summary>
/// 获取或设置水印在修改图片中的右边距
/// </summary>
public int RightSpace
{
get { return this .rightSpace;}
set { this .rightSpace = value;}
}
/// <summary>
/// 获取或设置水印在修改图片中距底部的高度
/// </summary>
public int BottoamSpace
{
get { return this .bottoamSpace;}
set { this .bottoamSpace = value;}
}
/// <summary>
/// 获取或设置要绘制水印的透明度,注意是原来图片透明度的百分比
/// </summary>
public int LucencyPercent
{
get { return this .lucencyPercent;}
set { if (value >= 0 && value <= 100 ) this .lucencyPercent = value; }
}
/// <summary>
/// 获取或设置要输出图像的路径
/// </summary>
public string OutPath
{
get { return this .outPath;}
set { this .outPath = value;}
}
#endregion

#region 开始绘制水印 DrawImage
/// <summary>
/// 开始绘制水印
/// </summary>
/// <example>
/// <code>
/// Watermark wm = new Watermark();
/// wm.DrawedImagePath= Server.MapPath("") + "/upfile/" + "backlogo.gif";
/// wm.ModifyImagePath=path;
/// wm.RightSpace=184;
/// wm.BottoamSpace=81;
/// wm.LucencyPercent=50;
/// wm.OutPath=Server.MapPath("") + "/upfile/" + fileName + "_new" + extension;
/// wm.DrawImage();
///
/// //保存加水印过后的图片,删除原始图片
/// mFileName=fileName + "_new" + extension;
/// if(File.Exists(path)) { File.Delete(path); }
/// </code>
/// </example>
public void DrawImage()
{
Image modifyImage
= null ;
Image drawedImage
= null ;
Graphics g
= null ;
try {
modifyImage
= Image.FromFile( this .ModifyImagePath); // 建立图形对象
drawedImage = Image.FromFile( this .DrawedImagePath);
g
= Graphics.FromImage(modifyImage);

int x = modifyImage.Width - this .rightSpace; // 获取要绘制图形坐标
int y = modifyImage.Height - this .BottoamSpace;

float [][] matrixItems = { // 设置颜色矩阵
new float [] { 1 , 0 , 0 , 0 , 0 },
new float [] { 0 , 1 , 0 , 0 , 0 },
new float [] { 0 , 0 , 1 , 0 , 0 },
new float [] { 0 , 0 , 0 , ( float ) this .LucencyPercent / 100f, 0 },
new float [] { 0 , 0 , 0 , 0 , 1 }};

ColorMatrix colorMatrix
= new ColorMatrix(matrixItems);
ImageAttributes imgAttr
= new ImageAttributes();
imgAttr.SetColorMatrix(colorMatrix,ColorMatrixFlag.Default,ColorAdjustType.Bitmap);

g.DrawImage(
// 绘制阴影图像
drawedImage,
new Rectangle(x,y,drawedImage.Width,drawedImage.Height),
0 , 0 ,drawedImage.Width,drawedImage.Height,
GraphicsUnit.Pixel,imgAttr);

string [] allowImageType = { " .jpg " , " .gif " , " .png " , " .bmp " , " .tiff " , " .wmf " , " .ico " }; // 保存文件
FileInfo file = new FileInfo( this .ModifyImagePath);
ImageFormat imageType
= ImageFormat.Gif;
switch (file.Extension.ToLower()) {
case " .jpg " : imageType = ImageFormat.Jpeg; break ;
case " .gif " : imageType = ImageFormat.Gif; break ;
case " .png " : imageType = ImageFormat.Png; break ;
case " .bmp " : imageType = ImageFormat.Bmp; break ;
case " .tif " : imageType = ImageFormat.Tiff; break ;
case " .wmf " : imageType = ImageFormat.Wmf; break ;
case " .ico " : imageType = ImageFormat.Icon; break ;
default : break ;
}
MemoryStream ms
= new MemoryStream();
modifyImage.Save(ms,imageType);
byte [] imgData = ms.ToArray();
modifyImage.Dispose();
drawedImage.Dispose();
g.Dispose();
FileStream fs
= null ;
if ( this .OutPath == null || this .OutPath == "" ) {
File.Delete(
this .ModifyImagePath);
fs
= new FileStream( this .ModifyImagePath,FileMode.Create,FileAccess.Write);
}
else {
fs
= new FileStream( this .OutPath,FileMode.Create,FileAccess.Write);
}
if (fs != null ) {
fs.Write(imgData,
0 ,imgData.Length);
fs.Close();
}
}
finally {
try {
drawedImage.Dispose();
modifyImage.Dispose();
g.Dispose();
}
catch {}
}
}
#endregion
}
}

 

转载于:https://www.cnblogs.com/livexy/archive/2010/07/05/1771714.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值