Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 14691|Resposta: 0

[ASP.NET] Use o manipulador geral (IHttpHandler) para criar uma marca d'água global da imagem

[Copiar link]
Publicado em 10/09/2015 23:37:26 | | | |


Marcas d'água servem para evitar que roubemos nossas imagens.

Duas maneiras de alcançar o efeito da marca d'água

1) Marca d'água pode ser adicionada quando o usuário faz o upload.

a) Benefícios: Comparado aos dois métodos, o servidor envia essa imagem diretamente para o cliente toda vez que o usuário a lê.

b) Contras: Destrói a imagem original.

2) Por meio do programa global de processamento geral, quando o usuário solicitar essa imagem, adicione uma marca d'água.

a) Benefícios: A imagem original não é destruída

b) Desvantagens: Os usuários precisam marcar com marca d'água as imagens solicitadas toda vez que fazem uma solicitação, o que desperdiça os recursos do 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
O código do arquivo para waterH.ashx é o seguinte:

Depois, você precisa configurar o seguinte nó no web.config:

Sob o nó system.web
    <httpHandlers>
      <adicionar verbo="*" caminho="Imagens/*.jpg" type="Watermark.waterH"/>
    </httpHandlers>

No começo, os nós que configurei foram:
    <httpHandlers>
      <adicionar verbo="*" caminho="Imagens/*.jpg" tipo="waterH"/>
    </httpHandlers>

reportará um erro,
Configuração incorreta

Descrição: Ocorreu um erro ao processar o perfil necessário para fornecer serviços à solicitação. Por favor, verifique os detalhes específicos do erro abaixo e modifique o arquivo de configuração adequadamente.

Mensagem de erro do analisador: Falhou ao carregar o tipo "waterH".

Erro de fonte:


Linha 15: <system.web>
Linha 16<httpHandlers>:
Linha 17: <adicionar verbo="*" caminho="Imagens/*.jpg" tipo="waterH"/>
Linha 18: </httpHandlers>
Linha 19: <compilation debug="true" targetFramework="4.0" />




Finalmente, emwaterH com o nome do projeto!
Por fim, anexe uma cópia do código-fonte: Watermark.rar (234.64 KB, Número de downloads: 0, 售价: 2 粒MB)




Anterior:360 Coolpad Zhou Hongyi e Jiang Chao se destruem ou fazem hyp?
Próximo:O site depende da ideia do cavalo, e a transferência externa é j/c
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com