首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自动为图片添加水印

自动为图片添加水印
EN

Stack Overflow用户
提问于 2012-10-13 13:07:18
回答 4查看 35.3K关注 0票数 26

在互联网上寻找自动添加水印的解决方案时,我在stackoverflow中找到了一个最好的解决方案。这个问题的链接是C# - Add watermark to the photo by special way。我特别感谢Alex Maslakovadrift

我实现了一些修改的解决方案,我想把水印放在图像的中心。我修改了adrift提供的解决方案,如下所示

代码语言:javascript
复制
   private void button1_Click(object sender, EventArgs e)
    {
        using (Image image = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"))
        using (Image watermarkImage = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\watermark.png"))
        using (Graphics imageGraphics = Graphics.FromImage(image))
        using (Brush watermarkBrush = new TextureBrush(watermarkImage))
        {
            int x = (image.Width - watermarkImage.Width)/2;
            int y = (image.Height - watermarkImage.Height)/2;
            imageGraphics.FillRectangle(watermarkBrush, new Rectangle(new Point(x, y), watermarkImage.Size));
            image.Save(@"C:\Users\Public\Pictures\Sample Pictures\Desert_watermark.jpg");
        }

    }

但是水印没有正确地放置在图像的中心(见下图)。

请纠正我..。

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-13 15:06:12

我终于找到了我问题的答案……

更正后的代码答案如下

代码语言:javascript
复制
    private void button1_Click(object sender, EventArgs e)
    {
        using (Image image = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"))
        using (Image watermarkImage = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\watermark.png"))
        using (Graphics imageGraphics = Graphics.FromImage(image))
        using (TextureBrush watermarkBrush = new TextureBrush(watermarkImage))
        {
            int x = (image.Width / 2 - watermarkImage.Width / 2);
            int y = (image.Height / 2 - watermarkImage.Height / 2);
            watermarkBrush.TranslateTransform(x, y);
            imageGraphics.FillRectangle(watermarkBrush, new Rectangle(new Point(x, y), new Size(watermarkImage.Width+1, watermarkImage.Height)));
            image.Save(@"C:\Users\Public\Pictures\Sample Pictures\Desert_watermark.jpg");
        }

    }

感谢Furqan Safdar和Abdias Software,link Problem in tiling image starting at different height using TextureBrush in C#也帮助我解决了这个问题

感谢所有人

最终结果

票数 24
EN

Stack Overflow用户

发布于 2012-10-13 13:58:42

顺便说一句,你的原始公式很好。

你确定两者的分辨率是一样的吗?将水印图像的DPI分辨率设置为image:

代码语言:javascript
复制
watermarkImage.SetResolution(imageGraphics.DpiX, imageGraphics.DpiY);

(从我的头顶上看,但我认为属性名称是正确的)。

更新:

为了使用SetResolution(),从图像更改为位图-看看这个更改是否适用于您-我已经更改了在图像上绘制水印的方式:

代码语言:javascript
复制
private void button1_Click(object sender, EventArgs e) {

    using (Bitmap image = Bitmap.FromFile("C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"))
    using (Bitmap watermarkImage = Bitmap.FromFile("C:\Users\Public\Pictures\Sample Pictures\watermark.png"))
    using (Graphics imageGraphics = Graphics.FromImage(image))
    {
        watermarkImage.SetResolution(imageGraphics.DpiX, imageGraphics.DpiY);

        int x = ((image.Width - watermarkImage.Width) / 2);
        int y = ((image.Height - watermarkImage.Height) / 2);

        imageGraphics.DrawImage(watermarkImage, x, y, watermarkImage.Width, watermarkImage.Height);

        image.Save("C:\Users\Public\Pictures\Sample Pictures\Desert_watermark.jpg");
    }
}
票数 8
EN

Stack Overflow用户

发布于 2012-10-13 13:40:43

尝试使用此代码进行居中对齐:

代码语言:javascript
复制
int x = (image.Width / 2 - watermarkImage.Width / 2);
int y = (image.Height / 2 - watermarkImage.Height / 2);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12870137

复制
相关文章

相似问题

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