`

.net图片水印类

阅读更多
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Drawing.Drawing2D;

 namespace JillZhang
{
/// <summary>
/// 给图片添加水印得类的描述
/// </summary>
public class WaterMark
{
  private bool _textMark=false;
  private bool _imgMark=false;
  private string _text="";
private string _imgPath="";
  private int _markX=0;
private int _markY=0;
private float _transparency=1;
private string _fontFamily="宋体";
private Color _textColor=Color.Black;
private bool _textbold=false;
  int[] sizes=new int[]{48,32,16,8,6,4};
/// <summary>
/// 实例化一个水印类
  /// </summary>
  public WaterMark()
{
   
  }
  /// <summary>
  /// 初始化一个只添加文字水印得实例
  /// </summary>
  /// <param name="text">水印文字</param>
  /// <param name="fontFamily">文字字体</param>
  /// <param name="bold">是否粗体</param>
  /// <param name="color">字体颜色</param>
  /// <param name="markX">标记位置横坐标</param>
/// <param name="markY">标记位置纵坐标</param>
  public WaterMark(string text,string fontFamily,bool bold,Color color,int markX,int markY)
{
   this._imgMark=false;
   this._textMark=true;
   this._text=text;
   this._fontFamily=fontFamily;
   this._textbold=bold;
  this._textColor=color;
   this._markX=markX;
   this._markY=MarkY;
}
  /// <summary>
  /// 实例化一个只添加图片水印得实例
/// </summary>
/// <param name="imagePath">水印图片路径</param>
/// <param name="tranparence">透明度</param>
/// <param name="markX">标记位置横坐标</param>
/// <param name="markY">标记位置纵坐标</param>
public WaterMark(string imagePath,float tranparence,int markX,int markY)
{
this._textMark=false;
this._imgMark=true;
this._imgPath=imagePath;
this._markX=markX;
this._markY=MarkY;
  this._transparency=tranparence;
}
/// <summary>
/// 是否添加文字水印
/// </summary>
public bool TextMark
{
  get{return _textMark;}
  set{_textMark=value;}
}
/// <summary>
/// 是否添加图片水印
/// </summary>
public bool ImageMark
{
  get{return _imgMark;}
  set{_imgMark=value;}  
}
/// <summary>
/// 文字水印得内容
  /// </summary>
public string Text
{
  get{return _text;}
set{_text=value;}
}
/// <summary>
/// 图片水印得图片地址
/// </summary>
public string ImagePath
{
get{return _imgPath;}
set{_imgPath=value;}
}
/// <summary>
/// 添加水印位置得横坐标
/// </summary>
public int MarkX
{
get{return _markX;}
set{_markX=value;}
}
/// <summary>
/// 添加水印位置得纵坐标
/// </summary>
public int MarkY
{
get{return _markY;}
set{_markY=value;}
}
/// <summary>
/// 水印得透明度
/// </summary>
public float Transparency
{
get{
if(_transparency>1.0f)
  {
   _transparency=1.0f;
  }
  return _transparency;}
set{_transparency=value;}
}
/// <summary>
/// 水印文字得颜色
/// </summary>
public Color TextColor
{
get{return _textColor;}
  set{_textColor=value;}
}
/// <summary>
/// 水印文字得字体
/// </summary>
public string TextFontFamily
{
  get{return _fontFamily;}
  set{_fontFamily=value;}
}
/// <summary>
/// 水印文字是否加粗
/// </summary>
public bool Bold
{
  get{return _textbold;}
  set{_textbold=value;}
}
/// <summary>
/// 添加水印,此方法适用于gif格式得图片
/// </summary>
/// <param name="image">需要添加水印得图片</param>
/// <returns>添加水印之后得图片</returns>
public Image Mark(Image img)
{
try
  {
  //添加文字水印
   if(this.TextMark)
   {
    //根据源图片生成新的Bitmap对象作为作图区,为了给gif图片添加水印,才有此周折
    Bitmap newBitmap=new Bitmap(img.Width,img.Height,PixelFormat.Format24bppRgb); 
    //设置新建位图得分辨率
   newBitmap.SetResolution(img.HorizontalResolution,img.VerticalResolution);
   //创建Graphics对象,以对该位图进行操作
    Graphics g = Graphics.FromImage(newBitmap);
   //消除锯齿
    g.SmoothingMode=SmoothingMode.AntiAlias;
   //将原图拷贝到作图区
   g.DrawImage(img,new Rectangle(0,0,img.Width,img.Height),0,0,img.Width,img.Height,GraphicsUnit.Pixel);
   //声明字体对象
   Font cFont = null;
    //用来测试水印文本长度得尺子
   SizeF size=new SizeF();
   //探测出一个适合图片大小得字体大小,以适应水印文字大小得自适应
   for(int i=0;i<6;i++)
    {
     //创建一个字体对象
     cFont= new Font(this.TextFontFamily,sizes[i]);
     //是否加粗
    if(!this.Bold)
     {
     cFont= new Font(this.TextFontFamily,sizes[i],FontStyle.Regular);
     }
    else
    {
     cFont=new Font(this.TextFontFamily,sizes[i],FontStyle.Bold);
    }
    //测量文本大小
     size=g.MeasureString(this.Text,cFont);
     //匹配第一个符合要求得字体大小
    if((ushort)size.Width<(ushort)img.Width)
    {
    break;
     }
   }
    //创建刷子对象,准备给图片写上文字
   Brush brush= new SolidBrush(this.TextColor);
//在指定得位置写上文字
   g.DrawString(this.Text,cFont,brush,this.MarkX,this.MarkY);
    //释放Graphics对象
    g.Dispose();   
    //将生成得图片读入MemoryStream
   System.IO.MemoryStream ms = new System.IO.MemoryStream();
    newBitmap.Save(ms,ImageFormat.Jpeg);
   //重新生成Image对象
   img=System.Drawing.Image.FromStream(ms); 
    //返回新的Image对象
   return img;

   }
   //添加图像水印
   if(this.ImageMark)
   {
    //获得水印图像
   Image markImg = Image.FromFile(this.ImagePath);
    //创建颜色矩阵
    float[][] ptsArray ={ 
         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, this.Transparency, 0}, //注意:此处为0.0f为完全透明,1.0f为完全不透明
         new float[] {0, 0, 0, 0, 1}}; 
    ColorMatrix colorMatrix= new ColorMatrix(ptsArray);
    //新建一个Image属性
    ImageAttributes imageAttributes= new ImageAttributes();
    //将颜色矩阵添加到属性
    imageAttributes.SetColorMatrix(colorMatrix,ColorMatrixFlag.Default,
     ColorAdjustType.Default);
   //生成位图作图区
    Bitmap newBitmap=new Bitmap(img.Width,img.Height,PixelFormat.Format24bppRgb);
    //设置分辨率
    newBitmap.SetResolution(img.HorizontalResolution,img.VerticalResolution);
    //创建Graphics
    Graphics g = Graphics.FromImage(newBitmap);
    //消除锯齿
    g.SmoothingMode=SmoothingMode.AntiAlias;
   //拷贝原图到作图区
    g.DrawImage(img,new Rectangle(0,0,img.Width,img.Height),0,0,img.Width,img.Height,GraphicsUnit.Pixel);
    //如果原图过小
    if(markImg.Width>img.Width||markImg.Height>img.Height)
    {
     System.Drawing.Image.GetThumbnailImageAbort callb=null;
     //对水印图片生成缩略图,缩小到原图得1/4
     System.Drawing.Image new_img=markImg.GetThumbnailImage(img.Width/4,markImg.Height*img.Width/markImg.Width,callb,new System.IntPtr());
     //添加水印
     g.DrawImage(new_img,new Rectangle(this.MarkX,this.MarkY,new_img.Width,new_img.Height),0,0,new_img.Width,new_img.Height,GraphicsUnit.Pixel,imageAttributes);
    //释放缩略图
     new_img.Dispose();
     //释放Graphics
    g.Dispose();
     //将生成得图片读入MemoryStream
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    newBitmap.Save(ms,ImageFormat.Jpeg);
//返回新的Image对象
     img=Image.FromStream(ms);
     return img;
    }
     //原图足够大
    else
    {
     //添加水印
     g.DrawImage(markImg,new Rectangle(this.MarkX,this.MarkY,markImg.Width,markImg.Height),0,0,markImg.Width,markImg.Height,GraphicsUnit.Pixel,imageAttributes);
     //释放Graphics
    g.Dispose();
     //将生成得图片读入MemoryStream
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
     newBitmap.Save(ms,ImageFormat.Jpeg);
     //返回新的Image对象
     img=Image.FromStream(ms);
     return img;
    }     
   }
   return img;
  }
  catch
  {
              return img;   
  }   
}
 
}
}
 
分享到:
评论

相关推荐

    asp.net图片水印效果

    在ASP.NET中,图片水印效果的实现是一个常见的需求,主要应用于版权保护、品牌标识或者时间戳等场景。本文将详细讲解如何利用IHttpHandler接口来实现这一功能。 首先,IHttpHandler接口是ASP.NET中处理HTTP请求的...

    功能很全的asp.net图片水印组件源码

    ASP.NET图片水印组件是一种用于在图片上动态添加文字或图像水印的工具,它能够帮助开发者在网站中实现安全的图片保护和品牌宣传。在ASP.NET框架下,这种组件通常是一个自定义控件或者服务类,可以方便地集成到网站的...

    asp.net图片水印组件_aspx开发教程.rar

    在“asp.net图片水印组件_aspx开发教程.rar”中,包含了一个名为"其他类别"的文件夹,里面是功能全面的ASP.NET图片水印组件 v2.0——`imagewatermark`。 首先,让我们深入了解图片水印的基本概念。水印是一种将特定...

    [其他类别]功能很全asp.net图片水印组件 v2.0_imagewatermark.zip

    总的来说,"[其他类别]功能很全asp.net图片水印组件 v2.0_imagewatermark" 是一个强大且易用的工具,它可以帮助ASP.NET开发者快速实现图片水印功能,无论是用于版权保护还是品牌推广,都能提供有效的解决方案。...

    ASP.NET 图片水印demo 供初学者参考

    通过以上步骤,初学者可以理解并实现一个简单的ASP.NET图片水印功能。然而,实际应用中可能还需要考虑更多细节,如错误处理、多格式图片支持、性能优化等。不断学习和实践,才能更好地掌握ASP.NET中的图像处理技术。

    VB.net文字水印和图片水印

    在VB.NET编程环境中,添加文字水印和图片水印是一项常见的任务,这主要涉及到图像处理和图形编程。VB.NET提供了一套丰富的类库,如System.Drawing命名空间,可以帮助开发者实现这些功能。以下是对这个主题的详细说明...

    asp.net 图片水印源码

    以下是对ASP.NET图片水印源码的详细解释: 1. **水印类型**:水印通常分为文本水印和图像水印两种。文本水印是在图片上添加文字,如公司名称、日期或版权信息;图像水印则是嵌入另一个图片作为装饰或保护元素。 2....

    功能很全asp.net图片水印组件源码2.0

    在这个“功能很全asp.net图片水印组件源码2.0”中,我们可以深入探讨以下几个关键知识点: 1. **ASP.NET Web Forms**: 项目中的页面如 Config_XML.aspx、SelColor.aspx 和 uploadimages.aspx 是 ASP.NET Web Forms ...

    .net图片水印生成源码,图片水印实例

    这就是一个基本的.NET图片水印生成实例。通过调整参数,你可以根据实际需求自定义水印的外观,如位置、颜色、透明度、旋转角度等。此外,还可以扩展这个功能,支持添加图片水印、调整水印的动态效果等。对于更复杂的...

    功能很全asp.net图片水印组件源码

    功能很全asp.net图片水印组件源码 可以配置的水印参数有: 水印功能 启用禁用 自定义文字水印阴影深度X轴 像素 水印类型 图片文字 自定义文字水印阴影深度Y轴 像素 水印图片路径 自定义水印位置X轴 ...

    ASP.NET图片水印生成控件

    ASP.NET图片水印生成控件是一种用于在网页中动态添加水印到图片的工具,它在Web应用程序中常被用来保护图像版权、增加品牌标识或提供额外信息。水印可以是文字、图形或者logo,其位置、透明度、字体、颜色等属性均可...

    ASP.NET图片水印效果

    ASP.NET图片水印效果是一种常见的图像处理技术,用于在图片上添加标识、日期或版权信息,以保护图像的原创性或防止未经授权的使用。在这个场景中,我们将通过使用ASP.NET的HttpHandler来实现这一功能。 首先,理解...

    ASP.NET源码——功能很全asp.net图片水印组件.zip

    在本案例中,"ASP.NET源码——功能很全asp.net图片水印组件.zip"是一个包含源代码的压缩包,提供了用于在ASP.NET应用中添加图片水印功能的组件。 图片水印是保护版权、增加品牌标识或提供日期戳的一种方法。在ASP...

    C# .net图片水印实例

    本文将详细介绍如何使用C# .NET实现图片水印功能,并通过具体的实例来阐述相关知识点。 首先,我们需要理解水印的基本概念。水印通常是一个半透明的图像或文字,叠加在原图上,既不会大幅度改变原图的观感,又能起...

    asp.net图片上传自动裁剪,加文字、图片水印

    总结来说,ASP.NET图片上传、自动裁剪和添加水印的功能,涉及文件上传、图像处理和图形绘制等技术。通过合理利用System.Drawing库或第三方库,可以轻松实现这些功能,为Web应用提供强大的图片处理能力。

    Spire.Doc For .Net 8.10 去水印

    然后,可以使用提供的类和方法来实现所需功能,如`Document`类用于Word操作,`PdfDocument`类用于PDF操作。 7. **性能优化**: 对于大型文档的处理,需要注意性能优化。例如,通过合理设置加载和保存选项,避免不必...

    ASP.NET-[其他类别]功能很全asp.net图片水印组件v2.0.zip

    这个压缩包文件"ASP.NET-[其他类别]功能很全asp.net图片水印组件v2.0.zip"包含了一个专用于ASP.NET平台的图片水印组件的最新版本v2.0。图片水印组件在许多场合非常实用,例如保护版权、添加标识或者提供日期戳等信息...

    [其他类别]功能很全asp.net图片水印组件 v2.0_imagewatermark(ASP.NET源码).rar

    [其他类别]功能很全asp.net图片水印组件 v2.0_imagewatermark(ASP.NET源码).rar

    功能很全asp.net图片水印组件 v2.0.rar

    水印类型 图片文字 自定义文字水印阴影深度Y轴 像素 水印图片路径 自定义水印位置X轴 像素 水印文字 自定义水印位置Y轴 像素 水印位置 左上角 左下角 居中 右上角 右下角 上居中 下居中 左居中 右居中 自定义缩略...

Global site tag (gtag.js) - Google Analytics