Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 14691|Відповідь: 0

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

[Копіювати посилання]
Опубліковано 10.09.2015 23:37:26 | | | |


Водяні знаки покликані запобігти кражбі наших зображень.

Два способи досягти ефекту водяного знака

1) Водяний знак можна додати під час завантаження користувача.

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

б) Мінуси: Знищує оригінальне зображення.

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="Images/*.jpg" type="Watermark.waterH"/>
    </httpHandlers>

Спочатку вузли, які я налаштовував, були такими:
    <httpHandlers>
      <add дієслово="*" path="Зображення/*.jpg" тип="waterH"/>
    </httpHandlers>

повідомить про помилку,
Неправильна конфігурація

Опис: Виникла помилка під час обробки профілю, необхідного для надання послуг за запитом. Будь ласка, перевірте деталі помилки нижче та відповідно змініть конфігураційний файл.

Повідомлення про помилку аналізатора: Не вдалося завантажити тип "waterH".

Помилка джерела:


Рядок 15: <system.web>
Рядок 16<httpHandlers>:
Рядок 17: <add verb="*" path="Images/*.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