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=;
private int _markY=;
private float _transparency=;
private string _fontFamily="宋体";
private Color _textColor=Color.Black;
private bool _textbold=false;
int[] sizes=new int[]{,,,,,};
/// <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(,,img.Width,img.Height),,,img.Width,img.Height,GraphicsUnit.Pixel);
//声明字体对象
Font cFont = null;
//用来测试水印文本长度得尺子
SizeF size=new SizeF();
//探测出一个适合图片大小得字体大小,以适应水印文字大小得自适应
for(int i=;i<;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[] {, , , , },
new float[] {, , , , },
new float[] {, , , , },
new float[] {, , , this.Transparency, }, //注意:此处为0.0f为完全透明,1.0f为完全不透明
new float[] {, , , , }};
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(,,img.Width,img.Height),,,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/,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),,,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),,,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;
}
} }
}

不错.net图片水印类的更多相关文章

  1. PHP 图片水印类

    <?php /** * 加水印类,支持文字图片水印的透明度设置.水印图片背景透明. * $obj = new WaterMask($imgFileName); //实例化对象 * $obj-&g ...

  2. C#图片水印类

    这个是学习用的呃,主要看一下水印在修改图片中距左边的宽度和高度是杂弄的就哦客了. using System; using System.Collections.Generic; using Syste ...

  3. 本图片处理类功能非常之强大可以实现几乎所有WEB开发中对图像的处理功能都集成了,包括有缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等功能

    import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...

  4. java常用开发工具类之 图片水印,文字水印,缩放,补白工具类

    import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...

  5. php使用GD库实现图片水印和缩略图——封装成类

    学完了如何使用GD库来实现对图片的各种处理,那么我们可以发现,不管哪种方法,都有相似之处,如果我们把这些相似的地方和不相似的地方都封装成类,这样就可以提升代码的速度,而且节省了很多时间,废话不多说,来 ...

  6. PHP的图片处理类(缩放、加图片水印和剪裁)

    <!--test.php文件内容--> <?php //包含这个类image.class.php include "image.class.php"; $img ...

  7. 图片水印工具类java

    关于jar包的导入我就不多说了,我会把引入的jar包显示出来,大家自行Google package com.net.util; import java.awt.AlphaComposite; impo ...

  8. simpleImageTool又纯java图片水印、缩放工具

    simpleImageTool又一个简单.好用的图片格式转换.缩放水印叠加等功能的纯Java图片工具库. simpleImageTool的由来,近期需要用到图片处理,通过网上的图片流直接进行缩放水印叠 ...

  9. pdo文字水印类,验证码类,缩略图类,logo类

    文字水印类 image.class.php <?php /** * webrx.cn qq:7031633 * @author webrx * @copyright copyright (c) ...

随机推荐

  1. Linux中的more命令

    ore命令,功能类似 cat , cat命令是整个文件的内容从上到下显示在屏幕上.  more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,而且还有搜寻 ...

  2. MySQL 表数据的导入导出

    数据导出 1.  使用 SELECT ...INTO OUTFILE ...命令来导出数据,具体语法如下. mysql> SELECT * FROM tablename INTO OUTFILE ...

  3. 使用SpringMVC参数传递时,解决get请求时中文乱码的问题

    问题描述: 使用SpringMVC参数传递时, 遇到get请求中文信息时,页面应答会显示中文乱码. 解决办法: 一,  我们需要把request.getParameter(“参数名”)获取到的字符串先 ...

  4. Tensorflow 自适应学习速率

    Tensorflow 自适应学习速率 在模型的初期的时候,往往设置为较大的学习速率比较好,因为距离极值点比较远,较大的学习速率可以快速靠近极值点:而,后期,由于已经靠近极值点,模型快收敛了,此时,采用 ...

  5. [持续集成学习篇]【1】[jenkins安装与配置]

    Guided Tour This guided tour will use the "standalone" Jenkins distribution which requires ...

  6. sysctl内核参数解析

    sysctl内核参数解析 kernel.参数 kernel.shmall = 2097152    ## 1> 表示所有内存大小.可以分配的所有共享内存段的总和最大值.(以页为单位) ## 2& ...

  7. google chrome & preferences & languages

    google chrome & preferences & languages language settings https://www.google.com/preferences ...

  8. [LOJ#121]动态图连通性

    [LOJ#121]动态图连通性 试题描述 这是一道模板题. 你要维护一张无向简单图.你被要求加入删除一条边及查询两个点是否连通. 0:加入一条边.保证它不存在. 1:删除一条边.保证它存在. 2:查询 ...

  9. 视音频数据处理入门:RGB、YUV像素数据处理【转】

    转自:http://blog.csdn.net/leixiaohua1020/article/details/50534150 ==================================== ...

  10. phpcms V9 安装黄页模块后,注册为普通会员并登录,点立即免费入驻企业库出现白板

    解决步骤: 1. 将php.ini修改: display_errors = On 2. 再次尝试,显示出错误: Fatal error: require(): Failed opening requi ...