Winform水印工具(文字和图片皆可)
简介:如题Winform水印工具,原图和水印图都将以缩略图的形式展示在工具上
水印类型/水印内容:文字、图片
水印位置:左上角、右上角、居中、左下角、右下角
待优化:工具上的原图和水印图的缩略图都生成了物理文件再加载的,可改为图片对象
文字大小和字体样式可增加等
目前是单一图片的水印,可增加部分代码改成文件夹的批量水印
如下图:
代码展示:
WaterMarkBll.cs:
/*----------------------------------------
* Corporation:**
* Author:彭振
* Time:2015-10-23 16:08:54
* Remark:图片处理相关业务处理(水印、缩略图)
----------------------------------------*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing.Imaging;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Collections;
namespace Watermark
{
/// <summary>
/// 水印的类型
/// </summary>
public enum WaterMarkType
{
/// <summary>
/// 文字水印
/// </summary>
TextMark,
/// <summary>
/// 图片水印
/// </summary>
ImageMark // 暂时只能添加文字水印
};
/// <summary>
/// 水印的位置
/// </summary>
public enum WaterMarkPosition
{
/// <summary>
/// 左上角
/// </summary>
WMP_Left_Top,
/// <summary>
/// 左下角
/// </summary>
WMP_Left_Bottom,
/// <summary>
/// 居中
/// </summary>
WMP_Center,
/// <summary>
/// 右上角
/// </summary>
WMP_Right_Top,
/// <summary>
/// 右下角
/// </summary>
WMP_Right_Bottom
};
/// <summary>
/// 图片处理相关业务处理(水印、缩略图)
/// </summary>
public class WaterMarkBll
{
public WaterMarkBll() { }
#region 给图片加水印
/// <summary>
/// 添加水印(分图片水印与文字水印两种)
/// </summary>
/// <param name="oldpath">原图片绝对地址</param>
/// <param name="newpath">新图片放置的绝对地址</param>
/// <param name="wmpPosition">要添加的水印的位置</param>
/// <param name="wmtType">要添加的水印的类型</param>
/// <param name="sWaterMarkContent">水印内容,若添加文字水印,此即为要添加的文字;
/// 若要添加图片水印,此为图片的路径</param>
public void addWaterMark(string oldpath, string newpath, WaterMarkPosition wmpPosition,
WaterMarkType wmtType, string sWaterMarkContent)
{
try
{
Image image = Image.FromFile(oldpath);
Bitmap b = new Bitmap(image.Width, image.Height,
PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(b);
g.Clear(Color.White);
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.High;
g.DrawImage(image, 0, 0, image.Width, image.Height);
switch (wmtType)
{
case WaterMarkType.TextMark:
//文字水印
this.addWatermarkText(g, sWaterMarkContent, wmpPosition.ToString(),
image.Width, image.Height);
break;