首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用imagemagick.net在c#中对图像应用水印

利用imagemagick.net在c#中对图像应用水印
EN

Stack Overflow用户
提问于 2015-07-29 13:01:38
回答 1查看 4.8K关注 0票数 0

我使用下面的代码来调整图像的大小。现在,我需要使用Magick.NET在这张图像上应用水印。

代码语言:javascript
复制
        var response = client.GetObject(request).ResponseStream;
        MagickImage image = new MagickImage(response);
        MagickGeometry size = new MagickGeometry(imgWidth, imgHeight);
        size.IgnoreAspectRatio = maintainAspectRatio;                                                       
        image.Resize(size);   


        Bitmap watermarkObj = (Bitmap)Bitmap.FromFile("G:/Images/watermark.png");
        Graphics imageGraphics = Graphics.FromImage(image.ToBitmap());
        Point point = new Point(image.Width - 118, image.Height - 29);                            
        imageGraphics.DrawImage(watermarkObj, point); 
        image.write("G:/Images/ProcessedImage.JPG");

工作代码:

代码语言:javascript
复制
            MagickGeometry size = new MagickGeometry(imgWidth, imgHeight);
            size.IgnoreAspectRatio = maintainAspectRatio;                                                       
            image.Resize(size);   


            Bitmap watermarkObj = (Bitmap)Bitmap.FromFile("G:/Images/watermark.png");
            Bitmap objImg = new Bitmap("G:/Images/OriginalImage.jpg");
            Graphics imageGraphics = Graphics.FromImage(objImg);
            Point point = new Point(image.Width - 118, image.Height - 29);                            
            imageGraphics.DrawImage(watermarkObj, point); 
            objImg.save("G:/Images/ProcessedImage.JPG");

所以,有人能帮我怎么用想象吗?原因是当我在图形中传递imageObject时,它不应用水印,就像我传递.net图像对象时一样,它应用水印。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-01 11:14:12

您的代码无法工作,因为image.ToBitmap()创建了一个新的位图。当您调用image.write("G:/Images/ProcessedImage.JPG");时,您正在保存未经修改的image实例版本。您应该执行以下操作。

代码语言:javascript
复制
using (MagickImage image = new MagickImage(response))
{
  MagickGeometry size = new MagickGeometry(imgWidth, imgHeight);
  size.IgnoreAspectRatiomaintainAspectRatio;                                   
  image.Resize(size);

  using (Bitmap watermarkObj = Bitmap)Bitmap.FromFile("G:/Images/watermark.png"))
  {
    using (Bitmap imageObj = image.ToBitmap())
    {
      using (Graphics imageGraphics = Graphics.FromImage(imageObj))
      {
        Point point = new Point(image.Width - 118, image.Height - 29);
        imageGraphics.DrawImage(watermarkObj, point);
        imageObj.Save("G:/Images/ProcessedImage.JPG");
      }
    }
  }
}

还请注意,我添加了using语句。在使用IDisposable类时,您确实应该使用它。

您也可以不使用System.Drawing来完成这一任务。我在Magick.NET文档中为以下内容创建了一个新示例:https://magick.codeplex.com/wikipage?title=Watermark&referringTitle=Documentation

您可以在您的情况下使用以下代码:

代码语言:javascript
复制
using (MagickImage image = new MagickImage(response))
{
  MagickGeometry size = new MagickGeometry(imgWidth, imgHeight);
  size.IgnoreAspectRatiomaintainAspectRatio;                                   
  image.Resize(size);

  using (MagickImage watermark = new MagickImage("G:/Images/watermark.png"))
  {
    image.Composite(watermark, image.Width - 118, image.Height - 29, CompositeOperator.Over);
    image.Write("G:/Images/ProcessedImage.JPG");
  }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31701190

复制
相关文章

相似问题

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