Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 14691|Respuesta: 0

[ASP.NET] Utiliza el manejador general (IHttpHandler) para crear una marca de agua global de la imagen

[Copiar enlace]
Publicado en 10/9/2015 23:37:26 | | | |


Las marcas de agua están pensadas para evitar que robemos nuestras imágenes.

Dos formas de lograr el efecto marca de agua

1) Se puede añadir una marca de agua cuando el usuario sube la carga.

a) Beneficios: En comparación con los dos métodos, el servidor envía esta imagen directamente al cliente cada vez que el usuario la lee.

b) Desvanecencias: Destruye la imagen original.

2) A través del programa global de procesamiento general, cuando el usuario solicite esta imagen, se añade una marca de agua.

a) Beneficios: La imagen original no se destruye

b) Desventajas: Los usuarios deben marcar con marca de agua las imágenes solicitadas cada vez que hacen una solicitud, lo que desperdicia los recursos del servidor.
  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. }
Copiar código
El código de archivo para waterH.ashx es el siguiente:

Luego necesitas configurar el siguiente nodo en web.config:

Bajo el nodo system.web
    <httpHandlers>
      <añadir verbo="*" ruta="Imágenes/*.jpg" tipo="Watermark.waterH"/>
    </httpHandlers>

Al principio, los nodos que configuré eran:
    <httpHandlers>
      <añadir verbo="*" ruta="Imágenes/*.jpg" tipo="waterH"/>
    </httpHandlers>

informará de un error,
Configuración incorrecta

Descripción: Se produjo un error al procesar el perfil necesario para proporcionar servicios a la solicitud. Por favor, revisa los detalles específicos del error a continuación y modifica el archivo de configuración adecuadamente.

Mensaje de error del analizador: No se pudo cargar el tipo "waterH".

Error de fuente:


Línea 15: <system.web>
Línea 16<httpHandlers>:
Línea 17: <añadir verbo="*" ruta="Imágenes/*.jpg" tipo="waterH"/>
Línea 18: </httpHandlers>
Línea 19: <compilación debug="true" targetFramework="4.0" />




Finalmente, en¡waterH con el nombre del proyecto!
Finalmente, adjunta una copia del código fuente: Watermark.rar (234.64 KB, Número de descargas: 0, 售价: 2 粒MB)




Anterior:¿360 Coolpad Zhou Hongyi y Jiang Chao se destrozan o se emocionan?
Próximo:La web se apoya en la idea del caballo, y la transferencia externa es j/c
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com