public class TxtWaterMark
{
public enum WaterPositionMode
{
LeftTop,//左上
LeftBottom,//左下
RightTop,//右上
RightBottom,//右下
Center,//中间
Other//其他,若选此项AddWaterText方法内自己把xValue和yValue穿进去
}
/// <summary>
/// 给图片加文字水印
/// </summary>
/// <param name="oldpath">图片地址</param>
/// <param name="savepath">加上文字水印以后图片保存地址</param>
/// <param name="watertext">水印文字</param>
/// <param name="position">水印位置</param>
/// <param name="fontName">水印文字字体</param>
/// <param name="fontSize">水印文字大小</param>
/// <param name="color">水印文字颜色</param>
/// <param name="alpha">水印文字透明度</param>
/// <param name="isBold">水印文字是否加粗</param>
/// <param name="xValue">水印位置position Other选项下设置</param>
/// <param name="yValue">水印位置position Other选项下设置</param>
public static void AddWaterText(string oldpath, string savepath, string watertext, WaterPositionMode position, string fontName, int fontSize, string fontColor, int alpha, bool isBold, float xValue = , float yValue = )
{
Image image = Image.FromFile(oldpath);
Bitmap bitmap = new Bitmap(image.Width, image.Height);
Graphics graphics = Graphics.FromImage(bitmap);
graphics.Clear(Color.White);
graphics.DrawImage(image, new Rectangle(, , image.Width, image.Height), , , image.Width, image.Height, GraphicsUnit.Pixel);
Font font = new Font(fontName, fontSize, FontStyle.Bold);
if (!isBold)
{
font = new Font(fontName, fontSize);
} SizeF ziSizeF = new SizeF();
ziSizeF = graphics.MeasureString(watertext, font);
float x = 0f;
float y = 0f;
switch (position)
{ case WaterPositionMode.LeftTop:
x = ziSizeF.Width / 2f;
y = 0f;
break;
case WaterPositionMode.LeftBottom:
x = ziSizeF.Width / 2f;
y = image.Height - ziSizeF.Height;
break;
case WaterPositionMode.RightTop:
x = image.Width * 1f - ziSizeF.Width / 2f;
y = 0f;
break;
case WaterPositionMode.RightBottom:
x = image.Width - ziSizeF.Width;
y = image.Height - ziSizeF.Height;
break;
case WaterPositionMode.Center:
x = image.Width / ;
y = image.Height / - ziSizeF.Height / ;
break;
case WaterPositionMode.Other:
x = xValue + ziSizeF.Width / 2f;
y = yValue;
break;
}
try
{
StringFormat stringFormat = new StringFormat { Alignment = StringAlignment.Center };
SolidBrush solidBrush = new SolidBrush(Color.FromArgb(alpha < ? : alpha, , , ));
graphics.DrawString(watertext, font, solidBrush, x + 1f, y + 1f, stringFormat);
SolidBrush brush = new SolidBrush(Color.FromArgb(alpha < ? : alpha, ColorTranslator.FromHtml(fontColor)));
graphics.DrawString(watertext, font, brush, x, y, stringFormat);
solidBrush.Dispose();
brush.Dispose();
bitmap.Save(savepath, ImageFormat.Png);
}
catch (Exception e)
{ }
finally
{
bitmap.Dispose();
image.Dispose();
} }
}

C#给图片加文字水印的更多相关文章

  1. PHP给图片加文字水印

    <?php /*给图片加文字水印的方法*/ $dst_path = 'http://f4.topitme.com/4/15/11/1166351597fe111154l.jpg'; $dst = ...

  2. Java图片加文字水印

    Java图片加文字水印 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.I ...

  3. PHP图片加文字水印和图片水印方法

    文字水印 $dst_path = 'dst.jpg'; //创建图片的实例$dst = imagecreatefromstring(file_get_contents($dst_path)); //打 ...

  4. PHP图片加文字水印和图片水印方法(鉴于李老师博客因没加水印被盗,特搜集的办法。希望能有用!)

    $dst_path = 'dst.jpg'; //创建图片的实例 $dst = imagecreatefromstring(file_get_contents($dst_path)); //打上文字 ...

  5. php图片添加文字水印方法汇总

    方法一: <?php header("content-type:text/html;charset=utf-8"); //指定图片路径 $src = "img/a. ...

  6. php给图片添加文字水印方法汇总

    在php中要给图片加水印我们需要给php安装GD库了,这里我们不介绍GD库安装,只介绍怎么利用php给图片添加文字水印的4种方法的汇总.有需要的小伙伴可以参考下. 1: 面向过程的编写方法 1 2 3 ...

  7. ASP.NET(C#)图片加文字、图片水印,神啊,看看吧

    ASP.NET(C#)图片加文字.图片水印 一.图片上加文字: //using System.Drawing; //using System.IO; //using System.Drawing.Im ...

  8. Asp.net 上传图片添加半透明图片或者文字水印的方法

    主要用到System.Drawing 命名空间下的相关类,如Brush.Image.Bitmap.Graphics等等类 Image类可以从图片文件创建Image的实例,Bitmap可以从文件也可以从 ...

  9. 利用php给图片添加文字水印--面向对象与面向过程俩种方法的实现

    1: 面向过程的编写方法 //指定图片路径 $src = '001.png'; //获取图片信息 $info = getimagesize($src); //获取图片扩展名 $type = image ...

随机推荐

  1. altium常用快捷键记录

    选中一个网络的点和线ctrl+h: 翻转器件的层 鼠标拖动+L: 镜像器件 鼠标拖动+x: 查看单一层shift+s: 隐藏/查看某些器件ctrl+d:

  2. 【java多线程】用户线程和守护线程的区别

    java中线程分为两种类型:用户线程和守护线程.通过Thread.setDaemon(false)设置为用户线程:通过Thread.setDaemon(true)设置为守护线程.如果不设置次属性,默认 ...

  3. UML中的几种关系(UML Relationships)

    依赖(Dependency) 依赖可以理解为一个类A使用到了另一个类B,而这种使用关系是具有偶然性的.临时性的.非常弱的,但是B类的变化会影响到A:比如某人要过河,需要借用一条船,此时人与船之间的关系 ...

  4. JavaScript中的函数(一)

    javaScript中的函数实际上是对象,每一个函数都是Function类型的实例,和其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也就是一个指向函数对象的指针,也就是函数对象的一个 ...

  5. Ubuntu 16.04 配置安卓5.1编译环境

    Ubuntu 16.04版本 电脑cpu必须是64位 硬盘分配大约100G的空间 1.ubuntu中更新源 $ sudo apt-get update 2.安装 openjdk-8-jdk $ sud ...

  6. for, while的用法

    for循环求1+2+3+4+....+100 # include <stdio.h> int main(void) { int i; //循环中更新的变量i不能定义成浮点型 ; ; i&l ...

  7. golang的beego框架开发时出现的问题纪录

    golang的beego框架开发时出现的问题纪录1.数据库并发时问题:[ORM]2017/02/20 23:44:05 -[Queries/default] - [FAIL / db.Query / ...

  8. jeecg中List页面的高级查询

    1.普通的高级查询 <t:datagrid name="orderworthList" title="订单价值统计" actionUrl="or ...

  9. IIS注册Framework4.0

    打开iis,确认一下framework4.0是否已经安装. 开始->控制面板->管理工具->Internet信息服务->应用程序池(左边栏)->观察右边主界面.net f ...

  10. 应用程序 system 函数

    1.使用实例 system("ps"); //执行shell命令ps 2.使用注意事项 system相当于创建了一个子进程,在子进程中调用程序.所以system执行的程序会继承主进 ...