Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 14691|Odpowiedź: 0

[ASP.NET] Użyj ogólnego handlera (IHttpHandler), aby stworzyć globalny znak wodny obrazu

[Skopiuj link]
Opublikowano 10.09.2015 23:37:26 | | | |


Znaki wodne mają zapobiegać kradzieży naszych zdjęć.

Dwa sposoby na osiągnięcie efektu znaku wodnego

1) Znak wodny może być dodany podczas przesyłania przez użytkownika.

a) Korzyści: W porównaniu do obu metod, serwer wysyła ten obraz bezpośrednio do klienta za każdym razem, gdy użytkownik go odczytuje.

b) Wady: Niszczy oryginalny obraz.

2) Poprzez globalny program przetwarzania ogólnego, gdy użytkownik żąda tego obrazu, dodaj znak wodny.

a) Korzyści: Oryginalny obraz nie zostaje zniszczony

b) Wady: Użytkownicy muszą za każdym razem, gdy zgłaszają żądanie, oznaczać znaki wodne, co marnuje zasoby serwera.
  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. }
Skopiuj kod
Kod pliku waterH.ashx jest następujący:

Następnie musisz skonfigurować następujący węzeł w web.config:

Pod węzłem system.web
    <httpHandlers>
      <add verb="*" path="Images/*.jpg" type="Watermark.waterH"/>
    </httpHandlers>

Na początku skonfigurowane były następujące węzły:
    <httpHandlers>
      <add verb="*" path="Images/*.jpg" type="waterH"/>
    </httpHandlers>

zgłosi błąd,
Błędna konfiguracja

Opis: Wystąpił błąd podczas przetwarzania profilu wymaganego do świadczenia usług dla żądania. Prosimy o sprawdzenie szczegółów błędu poniżej i odpowiednie zmodyfikowanie pliku konfiguracyjnego.

Komunikat o błędzie analizatora: Nie udało się załadować typu "waterH".

Błąd źródła:


Linia 15: <system.web>
Linia 16<httpHandlers>:
Linia 17: <dodaj czasownik="*" ścieżka="Obrazy/*.jpg" typ="waterH"/>
Linia 18: </httpHandlers>
Linia 19: <debugowanie kompilacji="true" targetFramework="4.0" />




Wreszcie, wwaterH z nazwą projektu!
Na koniec dołącz kopię kodu źródłowego: Watermark.rar (234.64 KB, Liczba pobranych plików: 0, 售价: 2 粒MB)




Poprzedni:360 Coolpad Zhou Hongyi i Jiang Chao rozrywają się nawzajem czy hype?
Następny:Strona internetowa wisi na porze, a transfer zewnętrzny to j/c
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com