이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 14691|회답: 0

[ASP.NET] 일반 핸들러(IHttpHandler)를 사용해 이미지의 글로벌 워터마크를 만드세요

[링크 복사]
게시됨 2015. 9. 10. 오후 11:37:26 | | | |


워터마크는 우리가 이미지를 훔치지 못하도록 하기 위한 것입니다.

워터마크 효과를 구현하는 두 가지 방법

1) 사용자가 업로드할 때 워터마크를 추가할 수 있습니다.

a) 장점: 두 가지 방법에 비해 서버는 사용자가 이 이미지를 읽을 때마다 고객에게 직접 전송합니다.

b) 단점: 원본 사진을 파괴합니다.

2) 글로벌 일반 처리 프로그램을 통해 사용자가 이 이미지를 요청할 때 워터마크를 추가합니다.

a) 이점: 원본 사진이 파괴되지 않음

b) 단점: 사용자가 요청을 할 때마다 요청한 이미지에 워터마크를 찍어야 하므로 서버 자원이 낭비됩니다.
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Drawing;
  6. using System.IO;

  7. namespace Watermark
  8. {

  9.     /// <summary>
  10.     /// waterH 的摘要说明
  11.     /// </summary>
  12.     public class waterH : IHttpHandler
  13.     {
  14.         public waterH()
  15.         { }
  16.         private const string WATERMARK_URL = "~/Test/watermark.png";
  17.         private const string DEFAULTIMAGE_URL = "~/Test/watermark.png";
  18.         public void ProcessRequest(HttpContext context)
  19.         {
  20.             System.Drawing.Image Cover;
  21.             if (File.Exists(context.Request.PhysicalPath))
  22.             {
  23.                 Cover = Image.FromFile(context.Request.PhysicalPath);
  24.                 Image watermark = Image.FromFile(context.Request.MapPath(WATERMARK_URL));
  25.                 Graphics g = Graphics.FromImage(Cover);
  26.                 g.DrawImage(watermark, new Rectangle(Cover.Width - watermark.Width, Cover.Height - watermark.Height, watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel);
  27.                 g.Dispose();
  28.                 watermark.Dispose();
  29.             }
  30.             else
  31.             {
  32.                 Cover = Image.FromFile(context.Request.MapPath(DEFAULTIMAGE_URL));
  33.             }
  34.             context.Response.ContentType = "images/jpeg";
  35.             Cover.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
  36.             Cover.Dispose();
  37.             context.Response.End();
  38.         }

  39.         public bool IsReusable
  40.         {
  41.             get
  42.             {
  43.                 return false;
  44.             }
  45.         }
  46.     }
  47. }
코드 복사
waterH.ashx의 파일 코드는 다음과 같습니다:

그 다음 web.config에서 다음 노드를 구성해야 합니다:

system.web 노드 아래에서
    <httpHandlers>
      <add verb="*" path="Images/*.jpg" type="Watermark.waterH"/>
    </httpHandlers>

처음에 제가 설정한 노드들은 다음과 같습니다:
    <httpHandlers>
      <add verb="*" path="Images/*.jpg" type="waterH"/>
    </httpHandlers>

오류를 보고할 것입니다,
구성 미흡

설명: 요청에 서비스를 제공하기 위해 필요한 프로필을 처리하는 과정에서 오류가 발생했습니다. 아래의 구체적인 오류 세부사항을 확인하고 설정 파일을 적절히 수정해 주시기 바랍니다.

분석기 오류 메시지: "waterH" 유형 로드에 실패함.

출처 오류:


15행: <system.web>
16행<httpHandlers>:
17행: <add verb="*" path="Images/*.jpg" type="waterH"/>
18행: </httpHandlers>
19행: <컴파일 debug="true" targetFramework="4.0" />




마지막으로,프로젝트의 이름이 붙은 waterH!
마지막으로, 소스 코드 사본을 첨부하세요: Watermark.rar (234.64 KB, 다운로드 횟수: 0, 售价: 2 粒MB)




이전의:360 쿨패드 저우 홍이와 장차오가 서로를 찢어버리는 건가요, 아니면 과대평가인가요?
다음:웹사이트 js는 말 위에 매달린 아이디어이고, 외부 전송은 j/c입니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com