Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 14691|Răspunde: 0

[ASP.NET] Folosește handler-ul general (IHttpHandler) pentru a crea o filigrană globală a imaginii

[Copiază linkul]
Postat pe 10.09.2015 23:37:26 | | | |


Filigranele sunt menite să ne împiedice să ne furăm imaginile.

Două moduri de a obține efectul watermark

1) Filigranul poate fi adăugat când utilizatorul încarcă.

a) Beneficii: Comparativ cu cele două metode, serverul trimite această imagine direct clientului de fiecare dată când utilizatorul o citește.

b) Dezavantaje: Distruge imaginea originală.

2) Prin programul general global de procesare, când utilizatorul solicită această imagine, adaugă un filigran.

a) Beneficii: Imaginea originală nu este distrusă

b) Dezavantaje: Utilizatorii trebuie să pună watermark la imaginile solicitate de fiecare dată când fac o cerere, ceea ce irosește resursele serverului.
  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. }
Cod de copiere
Codul fișierului pentru waterH.ashx este următorul:

Apoi trebuie să configurezi următorul nod pe web.config:

Sub nodul system.web
    <httpHandlers>
      <adaugă verb="*" path="Images/*.jpg" type="Watermark.waterH"/>
    </httpHandlers>

La început, nodurile pe care le-am configurat au fost:
    <httpHandlers>
      <adaugă verb="*" path="Images/*.jpg" type="waterH"/>
    </httpHandlers>

va raporta o eroare,
Configurare greșită

Descriere: A apărut o eroare la procesarea profilului necesar pentru a oferi servicii solicitării. Vă rugăm să verificați detaliile specifice de eroare de mai jos și să modificați fișierul de configurare corespunzător.

Mesaj de eroare al analizorului: A eșuat încărcarea tipului "waterH".

Eroare sursă:


Linia 15: <system.web>
Linia 16<httpHandlers>:
Linia 17: <adaugă verb="*" cale="Imagini/*.jpg" type="waterH"/>
Linia 18: </httpHandlers>
Linia 19: <compilation debug="true" targetFramework="4.0" />




În final, înwaterH cu numele proiectului!
În final, atașați o copie a codului sursă: Watermark.rar (234.64 KB, Numărul de descărcări: 0, 售价: 2 粒MB)




Precedent:360 Coolpad Zhou Hongyi și Jiang Chao se distrug reciproc sau se entuziasmează?
Următor:Site-ul se bazează pe ideea calului, iar transferul extern este j/c
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com