当前位置:编程学习 > C#/ASP.NET >>

图片添加水印时,如果图片偏小,水印比较大,就会占满图片,怎么解决

这是我现在用的水印类,以前没那个位图索引,后期又加的,不知道跟这个埃布埃关系

 /// <summary>
        /// 在图片上添加图片水印
        /// </summary>
        /// <param name="path">原服务器上的图片路径</param>
        /// <param name="syPicPath">水印图片的路径 80透明</param>
        /// <param name="waterPicPath">生成的水印图片存放路径</param>
        public void AddWaterPic(string path, string syPicPath, string waterPicPath)
        {
            using (Image img = Image.FromFile(path))
            {
                //如果原图片是索引像素格式之列的,则需要转换
                if (IsPixelFormatIndexed(img.PixelFormat))
                {
                    Bitmap bmp = new Bitmap(img.Width, img.Height, PixelFormat.Format32bppArgb);
                    using (Graphics g = Graphics.FromImage(bmp))
                    {
                        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                        g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                        g.DrawImage(img, 0, 0);
                    }
                    //下面的水印操作,就直接对 bmp 进行了                 
                    System.Drawing.Image waterImage = System.Drawing.Image.FromFile(syPicPath);
                    System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(bmp);
                    using (ImageAttributes imgAttrib = ImageAttrib(80f))
                    {
                        graphic.DrawImage(waterImage, new System.Drawing.Rectangle(img.Width - waterImage.Width, img.Height - waterImage.Height, waterImage.Width, waterImage.Height), 0, 0, waterImage.Width, waterImage.Height, GraphicsUnit.Pixel, imgAttrib);
                    }
                    graphic.Dispose();
                    img.Save(waterPicPath);
                    img.Dispose();
                }
                else //否则直接操作
                {
                    System.Drawing.Image image = System.Drawing.Image.FromFile(path);
                    System.Drawing.Image waterImage = System.Drawing.Image.FromFile(syPicPath);
                    System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(image);
                    using (ImageAttributes imgAttrib = ImageAttrib(80f))
                    {
                        graphic.DrawImage(waterImage, new System.Drawing.Rectangle(image.Width - waterImage.Width, image.Height - waterImage.Height, waterImage.Width, waterImage.Height), 0, 0, waterImage.Width, waterImage.Height, GraphicsUnit.Pixel, imgAttrib);
                    }
                    graphic.Dispose();
                    image.Save(waterPicPath);
                    image.Dispose();
                }
            }
        }


就是当图片大小这样的
打完水印后
就会铺满了。。我的那个方法怎么改改能固定大小的。。超大的图片的时候。就又会缩的很小了水印。。改怎么改呢。。。求指教。。
--------------------编程问答-------------------- 求帮忙啊。。 --------------------编程问答-------------------- 最直接的方法。就是做几个大小不一的水印图片,

先判断原始图片的大小。小于指定值的时候。就用较小的水印图片加上去。如果大图就用大的 --------------------编程问答--------------------
引用 2 楼  的回复:
最直接的方法。就是做几个大小不一的水印图片,

先判断原始图片的大小。小于指定值的时候。就用较小的水印图片加上去。如果大图就用大的

就没个通用点的不管大小打水印的类么。。 --------------------编程问答-------------------- 有人么。。。 --------------------编程问答-------------------- ````这个 给你个建议。    你可以吧水印的代码给进行一下修改


 graphic.DrawImage(waterImage, new System.Drawing.Rectangle(img.Width - waterImage.Width, img.Height - waterImage.Height, waterImage.Width, waterImage.Height), 0, 0, waterImage.Width, waterImage.Height, GraphicsUnit.Pixel, imgAttrib);

这一段代码  让水印跟随图片的长宽度进行一个等比例描绘。  或者说。 吧水印的图片的长宽进行等比例的减少。   这样都可以帮你解决问题。    。。 具体代码暂时没时间调试。。。  --------------------编程问答-------------------- 准备足够大的水印图片。
你先判断图片大小,然后适当的缩小水印图片,在画出来不就可以了。

但这样需要每次都调整水印图片,最好是有多张供选择的水印图片。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,