展会信息港展会大全

asp.net如何在图片上加水印文字具体实现
来源:互联网   发布日期:2016-01-26 10:57:10   浏览:2279次  

导读:这篇文章主要介绍了asp net如何在图片上加水印文字具体实现,有需要的朋友可以参考一下第一步,添加一个一般处理程序(Handler),本例是ImageHandler代码如下:using System;using System Data;using System C ...

这篇文章主要介绍了asp.net如何在图片上加水印文字具体实现,有需要的朋友可以参考一下

第一步,添加一个一般处理程序(Handler),本例是ImageHandler

代码如下:

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Net.Mime;

using System.IO;

using System.Drawing;

using System.Drawing.Imaging;

using System.Drawing.Drawing2D;

/// <summary>

/// Summary description for ImageHandler

/// </summary>

public class ImageHandler : IHttpHandler

{

public ImageHandler()

{

}

public string GetContentType(String path)

{

switch (Path.GetExtension(path))

{

case ".bmp": return "Image/bmp";

case ".gif": return "Image/gif";

case ".jpg": return "Image/jpeg";

case ".png": return "Image/png";

default: break;

}

return String.Empty;

}

public ImageFormat GetImageFormat(String path)

{

switch (Path.GetExtension(path).ToLower())

{

case ".bmp": return ImageFormat.Bmp;

case ".gif": return ImageFormat.Gif;

case ".jpg": return ImageFormat.Jpeg;

case ".png": return ImageFormat.Png;

default: return null;

}

}

protected byte[] WatermarkImage(HttpContext context)

{

byte[] imageBytes = null;

if (File.Exists(context.Request.PhysicalPath))

{

// Normally you'd put this in a config file somewhere.

string watermark = "世复检测";

Image image = Image.FromFile(context.Request.PhysicalPath);

Graphics graphic;

if (image.PixelFormat != PixelFormat.Indexed && image.PixelFormat != PixelFormat.Format8bppIndexed && image.PixelFormat != PixelFormat.Format4bppIndexed && image.PixelFormat != PixelFormat.Format1bppIndexed)

{

// Graphic is not a Indexed (GIF) image

graphic = Graphics.FromImage(image);

}

else

{

/* Cannot create a graphics object from an indexed (GIF) image.

* So we're going to copy the image into a new bitmap so

* we can work with it. */

Bitmap indexedImage = new Bitmap(image);

graphic = Graphics.FromImage(indexedImage);

// Draw the contents of the original bitmap onto the new bitmap.

graphic.DrawImage(image, 0, 0, image.Width, image.Height);

image = indexedImage;

}

graphic.SmoothingMode = SmoothingMode.AntiAlias & SmoothingMode.HighQuality;

Font myFont = new Font("Arial", 15);

SolidBrush brush = new SolidBrush(Color.FromArgb(255, Color.Red));

/* This gets the size of the graphic so we can determine

* the loop counts and placement of the watermarked text. */

SizeF textSize = graphic.MeasureString(watermark, myFont);

//// Write the text across the image.

//for (int y = 0; y < image.Height; y++)

//{

//for (int x = 0; x < image.Width; x++)

//{

//PointF pointF = new PointF(x, y);

//graphic.DrawString(watermark, myFont, brush, pointF);

//x += Convert.ToInt32(textSize.Width);

//}

//y += Convert.ToInt32(textSize.Height);

//}

// Write the text at the right bottom of the image.

for (int y = image.Height-25; y < image.Height; y++)

{

for (int x = image.Width-100; x < image.Width; x++)

{

PointF pointF = new PointF(x, y);

graphic.DrawString(watermark, myFont, brush, pointF);

x += Convert.ToInt32(textSize.Width);

}

y += Convert.ToInt32(textSize.Height);

}

using (MemoryStream memoryStream = new MemoryStream())

{

image.Save(memoryStream, GetImageFormat(context.Request.PhysicalPath));

imageBytes = memoryStream.ToArray();

}

}

return imageBytes;

}

#region IHttpHandler Members

public bool IsReusable

{

get { return false; }

}

public void ProcessRequest(HttpContext context)

{

context.Response.Clear();

context.Response.ContentType = GetContentType(context.Request.PhysicalPath);

byte[] imageBytes = WatermarkImage(context);

if (imageBytes != null)

{

context.Response.OutputStream.Write(imageBytes, 0, imageBytes.Length);

}

else

{

// No bytes = no image which equals NO FILE.

// Therefore send a 404 - not found response.

context.Response.StatusCode = 404;

}

context.Response.End();

}

#endregion

}

第二步,在web.config里添加如下代码:

代码如下:

<httpHandlers>

<!--<add verb="GET" type="ImageHandler" path="*.jpg,*.png,*.gif,*.bmp"/>-->

<add verb="GET" type="ImageHandler" path="Uploads/*/*.jpg"/>

</httpHandlers>

赞助本站

人工智能实验室

相关热词: 加水印 asp net

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港