62,253
社区成员
发帖
与我相关
我的任务
分享 protected void AddWaterPic(string Path, string Path_syp, string Path_sypf)
{
System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
System.Drawing.Image copyImage = System.Drawing.Image.FromFile(Path_sypf);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
g.DrawImage(copyImage, new System.Drawing.Rectangle(image.Width - copyImage.Width, image.Height - copyImage.Height, copyImage.Width, copyImage.Height), 0,0, copyImage.Width, copyImage.Height, System.Drawing.GraphicsUnit.Pixel);
g.Dispose();
image.Save(Path_syp);
image.Dispose();
}
/// <summary>
/// 水印位置
/// </summary>
public enum WatermarkPosition
{
/// <summary>
/// 左上
/// </summary>
LeftTop,
/// <summary>
/// 左中
/// </summary>
Left,
/// <summary>
/// 左下
/// </summary>
LeftBottom,
/// <summary>
/// 正上
/// </summary>
Top,
/// <summary>
/// 正中
/// </summary>
Center,
/// <summary>
/// 正下
/// </summary>
Bottom,
/// <summary>
/// 右上
/// </summary>
RightTop,
/// <summary>
/// 右中
/// </summary>
RightCenter,
/// <summary>
/// 右下
/// </summary>
RigthBottom
}
/// <summary>
/// 设置水印位置
/// </summary>
/// <param name="positon">枚举WatermarkPosition: WatermarkPosition</param>
/// <param name="X">原图Width: int</param>
/// <param name="Y">原图Height: int</param>
/// <param name="x">水印图Width: int</param>
/// <param name="y">水印图Height: int</param>
/// <param name="i">边距: int</param>
/// <returns>返回Rectangle: Rectangle</returns>
private Rectangle GetWatermarkRectangle(WatermarkPosition positon, int X, int Y, int x, int y, int i)
{
switch (positon)
{
case WatermarkPosition.LeftTop:
return new Rectangle(i, i, x, y);
case WatermarkPosition.Left:
return new Rectangle(i, (Y - y) / 2, x, y);
case WatermarkPosition.LeftBottom:
return new Rectangle(i, Y - y - i, x, y);
case WatermarkPosition.Top:
return new Rectangle((X - x) / 2, i, x, y);
case WatermarkPosition.Center:
return new Rectangle((X - x) / 2, (Y - y) / 2, x, y);
case WatermarkPosition.Bottom:
return new Rectangle((X - x) / 2, Y - y - i, x, y);
case WatermarkPosition.RightTop:
return new Rectangle(X - x - i, i, x, y);
case WatermarkPosition.RightCenter:
return new Rectangle(X - x - i, (Y - y) / 2, x, y);
default:
return new Rectangle(X - x - i, Y - y - i, x, y);
}
}
using System;
using System.Web;
using System.Drawing;
using FileImage;
public partial class CreateWaterMark : System.Web.UI.Page
{
private string url = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
//获取被创建水印图图像的地址
if (Request.Params["SourceImageUrl"] != null)
{
url = Request.Params["SourceImageUrl"].ToString();
}
if (string.IsNullOrEmpty(url) == true) return;
///设置源图和水印图的地址
string sourcePath = Server.MapPath(FileImageSystem.STOREFILEPATH + url);
string watermarkUrl = FileImageSystem.STOREWATERMARKIMAGEPATH + url;
string watermarkPath = Server.MapPath(watermarkUrl);
int startIndex = url.IndexOf("/") + 1;
int endIndex = url.LastIndexOf(".");
string watermark = url.Substring(startIndex, endIndex - startIndex);
///创建水印图
CreateWatermarkImage(sourcePath, watermarkPath, watermark);
///输出水印图的信息
Response.Write("创建图像(" + url + ")的水印图成功,保存文文件:" + watermarkUrl + "<br />");
///显示水印图片
imgWatermark.ImageUrl = watermarkUrl;
}
/// <summary>
/// 创建水印图
/// </summary>
/// <param name="sourcePath">源图路径(物理路径)</param>
/// <param name="watermarkPath">保存水印图路径(物理路径)</param>
/// <param name="watermark">水印文字</param>
private void CreateWatermarkImage(string sourcePath, string watermarkPath, string watermark)
{
Image sourceImage = Image.FromFile(sourcePath);
///根据源图的大小创建一个新的bmp图片
Image watermarkImage = new Bitmap(sourceImage.Width, sourceImage.Height);
///创建Graphics对象g
Graphics g = Graphics.FromImage(watermarkImage);
///设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
///设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
///清空画布,并把背景色设置为透明
g.Clear(System.Drawing.Color.Transparent);
///创建水印图,并绘制源图
g.DrawImage(sourceImage,
new System.Drawing.Rectangle(0, 0, sourceImage.Width, sourceImage.Height),
new System.Drawing.Rectangle(0, 0, sourceImage.Width, sourceImage.Height),
System.Drawing.GraphicsUnit.Pixel);
///创建字体和画笔
Font font = new Font("宋体", 48f, FontStyle.Bold);
Brush brush = new SolidBrush(Color.Red);
g.DrawString(watermark, font, brush, 50, 50);
try
{ ///保存水印图,其格式和原图格式相同。
watermarkImage.Save(watermarkPath, sourceImage.RawFormat);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{ ///释放资源
sourceImage.Dispose();
watermarkImage.Dispose();
g.Dispose();
}
}
}