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.
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Drawing;
- using System.IO;
- namespace Watermark
- {
- /// <summary>
- /// waterH 的摘要说明
- /// </summary>
- public class waterH : IHttpHandler
- {
- public waterH()
- { }
- private const string WATERMARK_URL = "~/Test/watermark.png";
- private const string DEFAULTIMAGE_URL = "~/Test/watermark.png";
- public void ProcessRequest(HttpContext context)
- {
- System.Drawing.Image Cover;
- if (File.Exists(context.Request.PhysicalPath))
- {
- Cover = Image.FromFile(context.Request.PhysicalPath);
- Image watermark = Image.FromFile(context.Request.MapPath(WATERMARK_URL));
- Graphics g = Graphics.FromImage(Cover);
- 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);
- g.Dispose();
- watermark.Dispose();
- }
- else
- {
- Cover = Image.FromFile(context.Request.MapPath(DEFAULTIMAGE_URL));
- }
- context.Response.ContentType = "images/jpeg";
- Cover.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
- Cover.Dispose();
- context.Response.End();
- }
- public bool IsReusable
- {
- get
- {
- return false;
- }
- }
- }
- }
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)
|