日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图片显示时加水印(不改变原图片)

發布時間:2024/10/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图片显示时加水印(不改变原图片) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[轉]:http://adyhpq.blog.163.com/blog/

剛剛寫了一個在顯示圖片是加水印的程序(不改變原圖片)的程序,寫出來和大家分享一下,也許有的人已經早就會了

原理很簡單,就是攔截HTTP請求,寫一個HttpHandler,首先我在web.config里面配置了圖片的根路徑:

<appSettings>

??? <add key="monitorPath" value="pictures"/>

?</appSettings>

這個pictures是放所有圖片的地方,包括下面的文件夾,從這里顯示的圖片都要加上水印.

然后寫一個類,繼承HttpHandler,這個類將自動放在AppCode下面,如下:

public class ShuiyinHandler:IHttpHandler

{

??? public bool IsReusable

??? {

??????? get { return true; }

??? }

??? public void ProcessRequest(HttpContext context)

??? {

??????? try

??????? {

??????????? //得到請求路徑

??????????? string url = context.Request.Url.AbsoluteUri.ToLower();

??????????? string monitorPath = ConfigurationManager.AppSettings["monitorPath"];

??????????? //是否包含圖片路徑

??????????? bool IsInterestUrl = url.Contains(monitorPath);

??????????? System.Drawing.Image imgSource = null;

???????????

????????????? //判斷原圖片是否存在

??????????? string physicalPath = context.Request.PhysicalPath;

??????????? if (!System.IO.File.Exists(physicalPath))

??????????? {

??????????????? context.Response.Write("圖片不存在");

??????????????? return;

??????????? }

??????????? //如果不是要加水印的文件或文件夾,就原樣輸出

??????????? if (!IsInterestUrl)

??????????? {

??????????????? imgSource = System.Drawing.Image.FromFile(physicalPath);

??????????????? imgSource.Save(context.Response.OutputStream, imgSource.RawFormat);

??????????????? imgSource.Dispose();

??????????????? return;

??????????? }

??????????? imgSource = System.Drawing.Image.FromFile(physicalPath);

??????????? //判斷是否是索引圖像格式

??????????? if (imgSource.PixelFormat == PixelFormat.Format1bppIndexed || imgSource.PixelFormat == PixelFormat.Format4bppIndexed || imgSource.PixelFormat == PixelFormat.Format8bppIndexed)

??????????? {

??????????????? //轉成位圖,這步很重要

??????????????? Bitmap bitmap = new Bitmap(imgSource.Width, imgSource.Height);

??????????????? System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(bitmap);

??????????????? System.Drawing.Font font = new System.Drawing.Font("Arial Black", 30.0f, System.Drawing.FontStyle.Bold);

??????????????? //將原圖畫在位圖上

??????????????? graphic.DrawImage(imgSource, new Point(0, 0));

??????????????? //將水印加在位圖上

??????????????? graphic.DrawString("www.dgxyt.com", font, System.Drawing.Brushes.Red, new System.Drawing.PointF());

??????????????????? //將位圖輸入到流

??????????????? bitmap.Save(context.Response.OutputStream, ImageFormat.Jpeg);

??????????????? graphic.Dispose();

??????????????? imgSource.Dispose();

??????????????? bitmap.Dispose();

??????????? }

??????????? else

??????????? {

??????????????? //不是索引圖像格式,直接在上面加上水印

??????????????? System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(imgSource);

??????????????? System.Drawing.Font font = new System.Drawing.Font("Arial Black", 30.0f, System.Drawing.FontStyle.Bold);

??????????????? graphic.DrawString("www.dgxyt.com", font, System.Drawing.Brushes.Red, new System.Drawing.PointF());

??????????????? imgSource.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

??????????????? imgSource.Dispose();

??????????????? graphic.Dispose();

??????????? }

??????????? //標明類型為jpg:如果不標注,IE沒有問題,但Firefox會出現亂碼

??????????? context.Response.ContentType = "image/jpeg";

??????????? context.Response.Flush();

??????????? context.Response.End();

??????? }

??????? catch

??????? {

??????????? throw;

??????? }

??? }

}

?

這樣HttpHandler寫好了,在web.config中中的HttpHandler節點下,加下如下代碼:

<httpHandlers>

????? <add verb="*" path="*.jpg,*.bmp,*.ico,*.jpeg" type="ShuiyinHandler"/>

? </httpHandlers>

?

這表示,jpg,bmp,ico,jpeg都可以加上水印,gif沒有試過,不過大家可以試下.

?

寫好之后,放在IIS上,居然不出來加水印的效果,這讓我郁悶了好久,后來終于找到原因,原來是沒有在IIS上沒有注冊以jpg,bmp,ico,jpeg為后綴的文件,IIS默認是不處理這些文件的。

?

處理方法:在網站上目錄上右擊,選擇屬性,選擇主目錄,配置,

隨便選擇列表中的一行,點擊編緝,復制執行文件的路徑,然后關閉,再點擊添加,可執行文件用粘貼就可以了,后綴名寫上.jpg,點擊確定。按此方法再添加其他后綴名。

?

這樣就實現水印效果了。

轉載于:https://www.cnblogs.com/sainaxingxing/archive/2008/09/03/1283303.html

總結

以上是生活随笔為你收集整理的图片显示时加水印(不改变原图片)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。