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

C#.NET 添加图片水印相关推荐

  1. c# 添加图片水印,可以指定水印位置+生成缩略图[付上帅图1,2,3,4]

    早上,一哥儿发来添加图片水印的资料.有三个信息,如下:              xx 09:57:35 http://index.cnblogs.com/archive/2004/10/20/544 ...

  2. 图片添加图片水印和文字水印

    title: 图片添加图片水印和文字水印 tags: 图片处理,水印,图片水印,文字水印 date: 2018-10-29 20:15:10 grammar_cjkRuby: true 前言:最近需要 ...

  3. laravel 图片流_Laravel 之添加图片水印

    在这篇文章中,我们将会学习怎样在 Laravel5.8 的程序当中给图片添加水印.为此,我们需要使用到 intervention image的 composer 包.我们能够添加文字或者图片水印.更多 ...

  4. 利用iTextSharp组件给PDF文档添加图片水印,文字水印

    最近在做关于PDF文档添加水印的功能,折腾了好久,终于好了.以下做个记录: 首先会用到iTextSharp组件,大家可以去官网下载,同时我也会在本文中附加进来. 代码中添加引用为:   usingSy ...

  5. Word如何添加图片水印,看这里就够了!怎样在word加入图像水印

    水印相信大家都些了解,在我们生活中有许多的防伪产品都有水印,对于自己的文件文档或者一些其它信息,对外公布的话容易被别人copy,对于这种情况我们可以添加一些水印,水印应能为受到版权保护的信息产品的归属 ...

  6. PHP实现给视频加图片水印,怎么在视频画面上加图片?如何给视频添加自己的图片作为水印?视频添加图片水印的方法...

    今天就是周一啦,昨天周末大家有没有跟好友去玩呢~反正小编是跟同学聚会去了,聚会主题:胖.哈哈哈,不过小编可不跟他们一样只会长胖,小编可是瘦瘦瘦的呢,偷偷的告诉你们,小编减肥瘦了三十斤哦,嘻嘻.好啦,废 ...

  7. Moviepy模块之视频添加图片水印

    文章目录 前言 视频添加图片水印 1.引入库 2.加载视频文件 3.加载水印图片 4.缩放水印图片大小 5.设置水印的位置 5.1 相对于视频的左上角 5.2 相对于视频的左下角 5.3 相对于视频的 ...

  8. iOS GPUImage研究六:为视频添加图片水印

    前言: 我们在前面已经做了关于.GPUImage导入方式.滤镜介绍.性能对比.图片处理.捕获照片处理.实时滤镜以及一个比较完整地Demo. 今天: 我们来给摄像头添加一个实时视频水印,很简单,大概有6 ...

  9. Java使用Spire.Doc实现Word文档添加图片水印

    通过本文你将学到: Spire.Doc是什么? 如何在项目中引入Spire.Doc依赖? 项目中基于Spire.Doc封装工具类实现Word文档添加图片水印? 一.Spire.Doc是什么? 1.Sp ...

最新文章

  1. 同事问我,SQL 语句明明命中了索引,为什么执行很慢?
  2. DASI_1_IntroToData
  3. vs2015 C#打包程序为exe
  4. VTK:Rendering之OutlineGlowPass
  5. 这么多连麦方案,到底哪种适合你?
  6. 个人工作总结04(冲刺二)
  7. Dojo1.6 中的事件处理
  8. python 北京大学陈斌教授_【慕课】Python 语言基础与应用(第2次开课)
  9. 吴恩达机器学习练习4:神经网络学习(损失函数和正则化)
  10. IPython系统相关内容及其配置信息
  11. cartographer探秘第四章之代码解析(八) --- 生成地图
  12. 2000,XP中显示器和系统匹配的问题?
  13. emWin—数字软键盘
  14. 计算机软件服务的财务制度,餐饮业财务管理制度流程
  15. 串联和并联拓扑PI控制器
  16. 项目经理必备的8种能力,最后一个90%的PM都认同!
  17. 计算机运行慢提速小技巧,教你为Win7系统加速的五个技巧
  18. Opengl三视图的坐标变换
  19. 电脑端Ins图片保存
  20. HMI-PLC数据交换方式之一 区域指针

热门文章

  1. java开发环境配置环境变量_3. Java开发环境的搭建:安装JDK,配置环境变量
  2. vue 数组赋值_如何给Vue的data中的数组赋值?
  3. FPGA在电平接口领域的应用
  4. 全局变量与静态全局变量
  5. 从名称认识电容在电路中的作用
  6. 巧用rsyslog收集多套日志并做单套日志的过滤分离
  7. 移动端手势库Hammer.js学习
  8. ArcGIS API for Silverlight 点沿着线流动
  9. Liunx 查看硬件信息
  10. gst-rtsp-server编译测试