博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#.NET 添加图片水印
阅读量:6272 次
发布时间:2019-06-22

本文共 4558 字,大约阅读时间需要 15 分钟。

using System;using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Imaging;using System.IO;namespace Pub.Class{    ///     /// 添加水印类 只支持添加图片水印    ///  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 构造器        ///         /// 构造函数        ///         public Watermark() { }        #endregion        #region 属性        ///   /// 获取或设置要修改的图像路径  ///   public string ModifyImagePath  {   get{
return this.modifyImagePath;} set{
this.modifyImagePath=value;} } /// /// 获取或设置在画的图片路径(水印图片) /// public string DrawedImagePath { get{
return this.drawedImagePath;} set{
this.drawedImagePath=value;} } /// /// 获取或设置水印在修改图片中的右边距 /// public int RightSpace { get{
return this.rightSpace;} set{
this.rightSpace=value;} } /// /// 获取或设置水印在修改图片中距底部的高度 /// public int BottoamSpace { get{
return this.bottoamSpace;} set{
this.bottoamSpace=value;} } /// /// 获取或设置要绘制水印的透明度,注意是原来图片透明度的百分比 /// public int LucencyPercent { get{
return this.lucencyPercent;} set { if(value>=0&&value<=100) this.lucencyPercent=value; } } /// /// 获取或设置要输出图像的路径 /// public string OutPath { get{
return this.outPath;} set{
this.outPath=value;} } #endregion #region 开始绘制水印 DrawImage /// /// 开始绘制水印 /// ///
///
/// 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); } /// ///
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 }}

转自:http://www.cnblogs.com/livexy/archive/2010/07/05/1771714.html

你可能感兴趣的文章
VB.NET多线程入门
查看>>
国外物联网平台初探(二) ——微软Azure IoT
查看>>
findlibrary returned null产生的联想,Android ndk开发打包时我们应该怎样注意平台的兼容(x86,arm,arm-v7a)...
查看>>
Android事件分发机制源代码分析
查看>>
《设计模式》结构型模式
查看>>
[javase学习笔记]-8.3 statickeyword使用的注意细节
查看>>
Spring集成RabbitMQ-使用RabbitMQ更方便
查看>>
Nginx 设置域名转向配置
查看>>
.net core 实现简单爬虫—抓取博客园的博文列表
查看>>
FP-Tree算法的实现
查看>>
Android 用Handler和Message实现计时效果及其中一些疑问
查看>>
Dos命令删除添加新服务
查看>>
C#.NET常见问题(FAQ)-索引器indexer有什么用
查看>>
hadoop YARN配置参数剖析—MapReduce相关参数
查看>>
Java 正则表达式详细使用
查看>>
【ADO.NET】SqlBulkCopy批量添加DataTable
查看>>
SqlServer--bat批处理执行sql语句1-osql
查看>>
Linux系列教程(十八)——Linux文件系统管理之文件系统常用命令
查看>>
laravel安装初体验
查看>>
用yum查询想安装的软件
查看>>