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. nginx grpc 试用

    1. 编译 wget https://nginx.org/download/nginx-1.13.10.tar.gz tar xvf nginx-1.13.10.tar.gz cd nginx-1.1 ...

  2. sqlserver docker 安装部署试用

    1. 镜像   docker pull exoplatform/sqlserver 2. 镜像参数    docker run -d -e SA_PASSWORD=<passord> -e ...

  3. Python 函数 -xrange()

    xrange() xrange() 函数用法与 range 完全相同,所不同的是生成的不是一个数组,而是一个生成器. 语法: xrange(stop) xrange(start, stop[, ste ...

  4. 【转载】chrome控制台中看见的cookie属性详解

    在chrome控制台中的resources选项卡中可以看到cookie的信息. 一个域名下面可能存在着很多个cookie对象. name字段为一个cookie的名称. value字段为一个cookie ...

  5. 查看Google Cloud的IP地址段

    for LINE in `dig txt _cloud-netblocks.googleusercontent.com +short | tr " " "\n" ...

  6. Java将对象写入文件读出——序列化与反序列化

    Java类中对象的序列化工作是通过ObjectOutputStream和ObjectInputStream来完成的. 写入: File aFile=new File("e:\\c.txt&q ...

  7. python set集合 以及 深浅拷贝

    set集合 特点: 无序, 不重复, 元素必须可哈希(不可变) 作用: 去重复 本身是可变的数据类型. 有增删改查操作. frozenset()冻结的集合. 不可变的. 可hash的 深浅拷贝() 1 ...

  8. JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招

    一般商业网站都有一个语言的需求,就是为了照顾使用正体中文的国人,会特地提供一个切换到正体中文的选项(或曰“繁体中文”).传统做法是在服务端完成的,即通过某些控件或者过滤器转换文本语言.这里笔者介绍一种 ...

  9. git 怎么上传文件到github上

    1.安装git     sudo  apt-get install git 2.配置全局变量     git config --global user.name langhunm     git co ...

  10. node的socket.io类库概述

    socket.io是一个简单的小类库,该类库实现的功能类似于node中的net模块所实现的功能. 这些功能包括websocket通信,xhr轮询,jsonp轮询等. socket类库可以接受所有与服务 ...