首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在其他图像(C#、ASP.Net)上放置水印图像

在其他图像(C#、ASP.Net)上放置水印图像
EN

Stack Overflow用户
提问于 2009-08-03 21:08:34
回答 2查看 31.8K关注 0票数 20

如何将水印图片添加到其他图片上?

我可以将文本放在图像上作为水印,但现在我有了一个要放在上面的图像,而不是文本。我如何在C#中做到这一点?

再说一次,我有一个图像X,我想把它作为一个水印符号。我希望这个符号出现在我的所有图像时,在我的网站上显示。因此,我将在图像Y和Z上添加图像X水印。

下面是我目前拥有的创建水印的代码:

代码语言:javascript
复制
public static void AddWaterMark(MemoryStream ms, string watermarkText, MemoryStream outputStream)
        {
            System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
            Graphics gr = Graphics.FromImage(img);
            Font font = new Font("Tahoma", (float)40);
            Color color = Color.FromArgb(50, 241, 235, 105);
            double tangent = (double)img.Height / (double)img.Width;
            double angle = Math.Atan(tangent) * (180 / Math.PI);
            double halfHypotenuse = Math.Sqrt((img.Height * img.Height) + (img.Width * img.Width)) / 2;
            double sin, cos, opp1, adj1, opp2, adj2;

            for (int i = 100; i > 0; i--)
            {
                font = new Font("Tahoma", i, FontStyle.Bold);
                SizeF sizef = gr.MeasureString(watermarkText, font, int.MaxValue);

                sin = Math.Sin(angle * (Math.PI / 180));
                cos = Math.Cos(angle * (Math.PI / 180));
                opp1 = sin * sizef.Width;
                adj1 = cos * sizef.Height;
                opp2 = sin * sizef.Height;
                adj2 = cos * sizef.Width;

                if (opp1 + adj1 < img.Height && opp2 + adj2 < img.Width)
                    break;
                //
            }

            StringFormat stringFormat = new StringFormat();
            stringFormat.Alignment = StringAlignment.Center;
            stringFormat.LineAlignment = StringAlignment.Center;

            gr.SmoothingMode = SmoothingMode.AntiAlias;
            gr.RotateTransform((float)angle);
            gr.DrawString(watermarkText, font, new SolidBrush(color), new Point((int)halfHypotenuse, 0), stringFormat);

            img.Save(outputStream, ImageFormat.Jpeg);
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-03 21:18:58

在调用gr.DrawString的同一位置,您还可以执行gr.DrawImage(position,size,overlayImage)。如果从PNG文件(具有透明度)加载要叠加的图像,以生成最佳质量,则会有所帮助。

票数 13
EN

Stack Overflow用户

发布于 2011-02-24 16:39:36

下面是另一个使用GDI+的解决方案

Creating a Watermarked Photograph with GDI+ for .NET

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1224653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档