C# 给站点指定位置的某种格式的图片添加水印

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using System.Drawing;

namespace Chen
{
    /// <summary>
    /// HandlerImageOpener 的摘要说明
    /// </summary>
    public class HandlerImageOpener : IHttpHandler
    {
        public HandlerImageOpener()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }

        private string _path = "";
        /// <summary>
        /// 水印图片路径
        /// </summary>
        public string PngPath
        {
            get
            {
                if (_path == "")
                {
                    _path = System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["WatermarkedImagePath"]);
                }
                return _path;
            }
        }

        /// <summary>
        /// 为图片加水印并写入到Response.OutputStream
        /// </summary>
        /// <param name="hc">上下文对象</param>
        public void GetNewBitMap(HttpContext hc)
        {
            // 加载原图片
            //System.Web.HttpContext.Current.Response.Write(System.Drawing.Image.FromFile(hc.Request.PhysicalPath));
            //System.Web.HttpContext.Current.Response.End();

            Bitmap oldBmp = new Bitmap(System.Drawing.Image.FromFile(hc.Request.PhysicalPath));

            int newWidth = oldBmp.Width;
            int newHeight = oldBmp.Height;

            if (oldBmp != null)
            {
                // 绑定画板
                Graphics grap = Graphics.FromImage(oldBmp);

                // 加载水印图片
                Bitmap bt = new Bitmap(PngPath);

                // 水印位置控制
                int pH = GetNewPoint(newHeight, bt.Height, true);
                int pW = GetNewPoint(newWidth, bt.Width, false);

                if (newHeight < pH * 8)
                    pH = pH / 2;
                if (newWidth < pW)
                    pW = pW / 2 / 2;

                int pX = newHeight - pH;
                int pY = newWidth - pW - 3;

                // 添加水印
                grap.DrawImage(bt, pY, pX, pW, pH);

                // 写入到输出流
                oldBmp.Save(hc.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
        }

        // 控制宽高
        private int GetNewPoint(int oldP, int newP, bool isW)
        {
            int p = 4;
            if (isW)
            {
                p = 16;
            }
            if (oldP < (newP * p))
            {
                newP /= 2;
                if (oldP < (newP * p))
                {
                    GetNewPoint(oldP, newP, isW);
                }
            }
            return newP;
        }

        #region IHttpHandler 成员

        bool IHttpHandler.IsReusable
        {
            get { return true; }
        }

        void IHttpHandler.ProcessRequest(HttpContext context)
        {
            GetNewBitMap(context);
        }
        #endregion
    }
}

 

        DirectoryInfo imagesfile = new DirectoryInfo(Server.MapPath("~/image"));

        FileInfo[] fileinfo = imagesfile.GetFiles("*.*");

        foreach (FileInfo fi in fileinfo)

        {

            strpic += "<img src=/"../image/" + fi.Name + "/" />";

        }

 

生成.dll文件后在web.config 中配置

<!--水印图片路径-->

  <appSettings>
    <add key="WatermarkedImagePath" value="~/logo.gif"/>
  </appSettings>


<!--引用处理函数 path为需要加水印图片的目录-->

    <httpHandlers>
      <add type="Chen.HandlerImageOpener, Chen" verb="*" path="image/*.jpg,image/*.gif,image/*.png,image/*.bmp" />
         </httpHandlers>

 

在IIS中配置:

 

对站点击右键-->“属性“-->“主目录”-->“配置”-->并启用“缓存ISAPI扩展“.....“添加...“-->扩展名:.jpg;可执行文件:”C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_isapi.dll“-->“确定”

依次添加.gif,.png,.bmp等要加水印的图片

如果不设置,就按正常的显示。

如果设置,其它位置的该类型图片无法正常显示。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用C#中的GDI+库来给图片添加水印效果。以下是一个简单的示例代码: ```csharp using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; public static Image AddWatermark(Image image, string watermarkText, Font font, Color color, float opacity, PointF position) { // 创建一个与原图相同大小的Bitmap对象 Bitmap bitmap = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppArgb); // 创建一个Graphics对象,用于绘制水印 using (Graphics graphics = Graphics.FromImage(bitmap)) { // 将Graphics对象的渲染质量设置为高质量 graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.CompositingQuality = CompositingQuality.HighQuality; // 绘制原图 graphics.DrawImage(image, new Rectangle(0, 0, bitmap.Width, bitmap.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel); // 创建一个Brush对象,用于绘制水印文字 Brush brush = new SolidBrush(Color.FromArgb((int)(opacity * 255), color)); // 绘制水印文字 graphics.DrawString(watermarkText, font, brush, position); // 释放Brush对象 brush.Dispose(); } // 返回添加水印后的图片 return bitmap; } ``` 以上代码中,`AddWatermark`方法接受以下参数: - `image`:要添加水印图片。 - `watermarkText`:要添加水印文字。 - `font`:水印文字的字体。 - `color`:水印文字的颜色。 - `opacity`:水印文字的不透明度,取值范围为0-1。 - `position`:水印文字的位置。 使用示例: ```csharp Image image = Image.FromFile("sample.jpg"); Font font = new Font("Arial", 24); Color color = Color.White; float opacity = 0.5f; PointF position = new PointF(10, 10); Image newImage = AddWatermark(image, "Sample Watermark", font, color, opacity, position); newImage.Save("sample-with-watermark.jpg", ImageFormat.Jpeg); ``` 以上示例中,我们从文件中加载了一张名为`sample.jpg`的图片,然后使用`AddWatermark`方法添加了一个水印,最后将添加水印后的图片保存为`sample-with-watermark.jpg`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值