Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 14691|Yanıt: 0

[ASP.NET] Genel handler (IHttpHandler) kullanılarak görüntünün küresel bir filigranı oluşturuldu

[Bağlantıyı kopyala]
Yayınlandı 10.09.2015 23:37:26 | | | |


Watermarklar, görsellerimizi çalmamızı engellemek için tasarlanmıştır.

Watermark etkisini elde etmenin iki yolu

1) Kullanıcı yüklediğinde watermark eklenebilir.

a) Avantajlar: Bu iki yönteme kıyasla, sunucu bu görüntüyü her seferinde doğrudan müşteriye gönderir.

b) Eksiler: Orijinal resmi yok eder.

2) Kullanıcı bu görüntüyü talep ettiğinde, küresel genel işleme programı aracılığıyla bir filigran ekleyin.

a) Faydalar: Orijinal resim yok edilmez

b) Dezavantajlar: Kullanıcılar her istek yaptıklarında istenen görselleri filigranla işaretlemek zorunda, bu da sunucunun kaynaklarını boşa harcandır.
  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. }
Kopya kodu
waterH.ashx dosya kodu şu şekildedir:

Sonra web.config üzerinde aşağıdaki düğümü yapılandırmanız gerekiyor:

system.web düğümü altında
    <httpHandlers>
      <fiil ekle="*" path="Images/*.jpg" type="Watermark.waterH"/>
    </httpHandlers>

Başlangıçta, yapılandırdığım düğümler şunlardı:
    <httpHandlers>
      <fiil ekle="*" path="Images/*.jpg" type="waterH"/>
    </httpHandlers>

bir hata bildireceğim,
Yanlış yapılandırma

Açıklama: Talebe hizmet sağlamak için gereken profil işlenirken bir hata meydana geldi. Lütfen aşağıdaki özel hata detaylarını kontrol edin ve yapılandırma dosyasını uygun şekilde değiştirin.

Analizör hata mesajı: "waterH" tipi yüklenemedi.

Kaynak hatası:


Satır: <system.web>
16. <httpHandlers>Satır:
Satır 17: <fiil ekle="*" path="Images/*.jpg" type="waterH"/>
18. Satır: </httpHandlers>
Satır 19: <derleme hatalı hata ayıklama="true" targetFramework="4.0" />




Son olarak,Projenin adıyla waterH!
Son olarak, kaynak kodunun bir kopyasını ekleyin: Watermark.rar (234.64 KB, İndirme sayısı: 0, 售价: 2 粒MB)




Önceki:360 Coolpad Zhou Hongyi ve Jiang Chao birbirini parçalıyor mu yoksa abartı mı?
Önümüzdeki:Web sitesi at fikrine dayanıyor ve dış transfer j/c
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com