この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 14691|答える: 0

[ASP.NET] 一般ハンドラー(IHttpHandler)を使って画像のグローバルウォーターマークを作成します

[リンクをコピー]
掲載地 2015/09/10 23:37:26 | | | |


透かしは、私たちが画像を盗むのを防ぐためのものです。

透かし効果を得る方法は2つあります

1) ユーザーがアップロードした際にウォーターマークを追加できます。

a) 利点:2つの方法と比べて、サーバーはユーザーが画像を読むたびに直接顧客に送信します。

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

最初に設定したノードは以下の通りです:
    <httpHandlers>
      <add verb="*" path="Images/*.jpg" type="waterH"/>
    </httpHandlers>

エラーを報告します。
ミスコンビリテーション

説明:リクエストにサービスを提供するために必要なプロファイルの処理中にエラーが発生しました。 以下の具体的なエラー情報をご確認いただき、設定ファイルを適切に修正してください。

アナライザーのエラーメッセージ:「waterH」タイプの読み込みに失敗しました。

出典の誤り:


15行目:<system.web>
16行<httpHandlers>目:
17行目:<add verb="*" path="Images/*.jpg" type="waterH"/>
18行目: </httpHandlers>
19行目:<コンパイル debug="true" targetFramework="4.0" />




ついに、プロジェクト名のwaterH!
最後に、ソースコードのコピーを添付してください: Watermark.rar (234.64 KB, ダウンロード数: 0, 售价: 2 粒MB)




先の:360クールパッド 周鴻義と江超はお互いを激しく引き裂くのか、それとも盛り上がっているのか?
次に:ウェブサイトのjsは「ハングオン・ザ・ホース」のアイデアで、外部の転送はj/cです
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com