이번 시간에는 이미지에 워터마크를 찍어보는 시간을 갖겠습니다.
우선 이 내용이 이해가 가지 않는 분은
오늘 알아볼 내용은 무척이나 간단하답니다.
우선 IIS 에서 자신의 웹사이트의 구성으로 가셔서 다음의 “.mark” 확장자를 매핑하세요
이제 web.config 의 httpHandlers 섹션에 다음의 구문을 추가해 줍니다
|
<addverb="*"path="*.mark"type="UmcMarkImageHandler, App_Code"></add> |
Type 속성은 클래스이름(네임스페이스부터) 과 DLL 이름으로 구성되어 있습니다.
위의 UmcMarkImageHandler 는 IHttpHandler 만 상속받아 작성하시면 됩니다.
UmcMarkImageHandler.cs
|
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
///<summary>
/// UmcMarkImageHandler의 요약 설명입니다.
///</summary>
public class UmcMarkImageHandler : IHttpHandler
{
public UmcMarkImageHandler()
{
}
#region IHttpHandler 멤버
public bool IsReusable
{
get
{
return false;
}
}
public void ProcessRequest(HttpContext context)
{
string filename = context.Request.Path;
string fn = Path.GetFileName(filename).ToLower();
string ext = Path.GetExtension(fn);
// 확장자가 .mark 가 아니라면 걍 이미지를 뿌려준다.
if (!(ext == ".mark"))
{
System.Drawing.Image nonImg = System.Drawing.Image.FromFile(context.Server.MapPath(filename));
nonImg.Save(context.Response.OutputStream, ImageFormat.Jpeg);
nonImg.Dispose();
return;
}
// 이미지를 가져와서...
System.Drawing.Image img = System.Drawing.Image.FromFile(context.Server.MapPath(filename));
Bitmap bitmap = new Bitmap(img.Width, img.Height);
Graphics g = Graphics.FromImage(bitmap);
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
// 이 이미지는 합성될 이미지 입니다.
System.Drawing.Image imgText = System.Drawing.Image.FromFile(context.Server.MapPath("mark.gif"));
// 여기서부터 mark.gif 의 마크업 이미지에 투명도를 줘서 합성시킵니다.
float[][] matrixItems ={
new float[] {1, 0, 0, 0, 0}, new float[] {0, 1, 0, 0, 0}, new float[] {0, 0, 1, 0, 0}, new float[] {0, 0, 0, 0.8f, 0}, new float[] {0, 0, 0, 0, 1}}; ColorMatrix colorMatrix = new ColorMatrix(matrixItems);
ImageAttributes imageAtt = new ImageAttributes();
imageAtt.SetColorMatrix(
colorMatrix,
ColorMatrixFlag.Default,
ColorAdjustType.Bitmap);
g.DrawImage(imgText,
new Rectangle(0, 0, img.Width, img.Height),
0,
0,
imgText.Width,
imgText.Height,
GraphicsUnit.Pixel,
imageAtt);
g.DrawImage(img,
new Rectangle(0, 0, img.Width, img.Height),
0,
0,
img.Width,
img.Height,
GraphicsUnit.Pixel,
imageAtt);
bitmap.Save(context.Response.OutputStream, ImageFormat.Jpeg);
g.Dispose();
img.Dispose();
imgText.Dispose();
bitmap.Dispose();
}
#endregion
} |
약간 소스가 쬐~~까~~ 긴감이 있네요~
여기서 mark.gif 이미지 만드는 법을 알려드리겠습니다.
포토샵에서 원하는 글자를 적으신 후 글자 이외의 배경은 투명하게 만드세요
Mark.gif
보이는 대로 위 이미지와 합성될 것입니다.
MarkImage.aspx
|
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>제목 없음</title>
</head>
<body>
<form id="form1" runat="server">
<div>
두 이미지는 같은 이미지 입니다. 확장자만 바꾼결과 마크 이미지가 생겼습니다.<br>
<br>
image.jpg<br>
<img src="image.jpg" />
<p />
image.mark<br>
<img src="image.mark" />
</div>
</form>
</body>
</html> |
이제 완성이 되었네요~
이 예제의 샘플을 보시려면
http://umc.pe.kr/Sample/MarkImage/marksample.umcx
http://umc.pe.kr/Sample/MarkImage/marksample.umcx
근데 정확히 시간은 재보지 않았지만, 눈에 띄게 합성 속도가 느리더군요~
샘플로 사용된 이미지 자체가 뷁~ 스럽게 큰 이유도 있고,
이미지 출력을 JPG 압축하는 이유도 있겠습니다만..^^;
샘플로 사용된 이미지 자체가 뷁~ 스럽게 큰 이유도 있고,
이미지 출력을 JPG 압축하는 이유도 있겠습니다만..^^;
한가지 팁… 확장자를 JPEG 또는 JPG 등으로 사용하시면 안됩니다.
브라우져가 먼저 이미지를 뿌려주지 않고, 닷넷이 먼저 확장자에 접근합니다.
브라우져가 먼저 이미지를 뿌려주지 않고, 닷넷이 먼저 확장자에 접근합니다.
이부분을 좀더 활용해 보시면 의외로 응용부분이 많을 겁니다^^
이런;;
다음번에는 이것보다 더 유익한거 하나 알려드릴께요^^
기대하세용~
'.NET > ASP.NET' 카테고리의 다른 글
| 너 ASPX 웹폼 확장자를 바꿔봤니? 난 해봤~어! (0) | 2007/04/09 |
|---|---|
| Composite Pattern 을 사용하여 MVC Pattern 구현 (0) | 2007/04/06 |
| 이미지를 합성해보자~ [ 이미지 도용방지 ] (0) | 2007/04/06 |
| 제네릭 처리기를 이용하여 자동가입방지 폼 구현 (0) | 2007/04/05 |
| 파일을 압축하여 내려받자 (0) | 2007/04/05 |
| Web.Config 를 확장해 보자 (2) | 2007/04/05 |





