Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 14691|Ответ: 0

[ASP.NET] Используйте общий обработчик (IHttpHandler), чтобы создать глобальный водяной знак изображения

[Скопировать ссылку]
Опубликовано 10.09.2015 23:37:26 | | | |


Водяные знаки предназначены для того, чтобы предотвратить кражу наших изображений.

Два способа добиться эффекта водяного следа

1) Водяной знак можно добавить при загрузке пользователя.

a) Преимущества: по сравнению с двумя методами, сервер отправляет это изображение напрямую клиенту каждый раз, когда пользователь его читает.

b) Минусы: Разрушает оригинальную картинку.

2) Через глобальную программу общей обработки, когда пользователь запрашивает это изображение, добавьте водяной знак.

a) Преимущества: оригинальная фотография не уничтожается

b) Недостатки: Пользователям приходится ставить водяной знак на запрошенные изображения каждый раз при отправке запроса, что приводит к трате ресурсов сервера.
  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. }
Копирование кода
Код файла waterH.ashx следующий:

Затем нужно настроить следующий узел на web.config:

В узле system.web
    <httpHandlers>
      <add verb="*" path="Изображения/*.jpg" type="Watermark.waterH"/>
    </httpHandlers>

В начале мои узлы были следующими:
    <httpHandlers>
      <add verb="*" path="Изображения/*.jpg" type="waterH"/>
    </httpHandlers>

сообщит об ошибке,
Неправильная конфигурация

Описание: При обработке профиля, необходимого для предоставления услуг по запросу, произошла ошибка. Пожалуйста, ознакомьтесь с конкретными деталями ошибок ниже и соответствующим образом измените конфигурационный файл.

Сообщение об ошибке анализатора: не удалось загрузить тип "waterH".

Ошибка источника:


Строка 15: <system.web>
Строка 16<httpHandlers>:
Строка 17: <add verb="*" path="Изображения/*.jpg" type="waterH"/>
Строка 18: </httpHandlers>
Строка 19: <compilation debug="true" targetFramework="4.0" />




Наконец, вwaterH с названием проекта!
Наконец, приложите копию исходного кода: Watermark.rar (234.64 KB, Количество скачиваний: 0, 售价: 2 粒MB)




Предыдущий:360 Coolpad Чжоу Хунъи и Цзян Чао разрывают друг друга или хайп?
Следующий:Сайт js опирается на идею лошади, а внешний перенос — j/c
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com