【问题标题】:C# change watermark image size depending upon original imageC#根据原始图像更改水印图像大小
【发布时间】:2018-05-19 17:38:36
【问题描述】:

我在上传之前为我的图片添加了水印。 我面临的问题是如果图像很小,水印看起来很大.. 我想根据原始图像更改水印图像大小..

例如: 水印图像应该是原始图像的 30%。 我在 c# 中这样做:

imageGraphics.FillRectangle(watermarkBrush, new Rectangle(new Point(x,y), new Size(watermarkImage.Width + 1, watermarkImage.Height)));

我应该怎么做才能首先获取图像大小,然后相应地更改水印图像大小??

【问题讨论】:

  • 嗯...你是如何应用水印的? Image 对象系列有 .Width.Height 值 - 所以你需要做一个简单的缩放操作来保留纵横比并在你加水印时使用它,但没有代码我们将无法提供帮助
  • @Basic 用于水印:imageGraphics.FillRectangle(watermarkBrush, new Rectangle(new Point(x, y), new Size(watermarkImage.Width + 1, watermarkImage.Height)));

标签: c# image watermark


【解决方案1】:

那么……类似:

Bitmap yourImage = ...;
Bitmap yourWatermark = ...;

int newWaterWidth = (int)((float)yourImage.Width * .3);
int newWaterHeight = (int)((float)yourImage.Height* .3);


using(Bitmap resizedWaterm = new Bitmap(newWaterWidth, newWaterHeight))
using(Graphics g = Graphics.FromImage((Image)resizedWaterm))
{
  g.InterpolationMode = InterpolationMode.HighQualityBicubic;
  g.DrawImage(yourWatermark, 0, 0, newWaterWidth , newWaterHeight );
}

int x = ..., y = ...;
using(Graphics g2 = Graphics.FromImage((Image)resizedWaterm))
{
  g2.FillRectangle(watermarkBrush, new Rectangle(new Point(x, y), new Size(watermarkImage.Width + 1, watermarkImage.Height)));
}

(未测试,您还需要在...点处填写值)

调整大小的代码:Resizing an Image without losing any quality

希望这会有所帮助!

【讨论】:

  • 你能告诉我“destWidth, destHeight”是什么吗??
  • oh tats wat 我在想... :) n "x,y" 是我想要放置水印的位置。对吗?
  • 确实,它们的值与您原始语句中的值相同。
  • 好吧... :) 谢谢.. 并且 InterpolationMode 给出了一个错误.. 我包括了 system.drawing
  • 嘿,谢谢.. 它工作得很好.. 我评论了“g.InterpolationMode = InterpolationMode.HighQualityBicubic;” @mortb
【解决方案2】:

NReco.VideoConverter.FFMpegConverter ffMpeg = new NReco.VideoConverter.FFMpegConverter();

            string pathToVideoFile = "D:\\Projects\\Project\\Db_Script\\TAR_Dummy\\TAR_Dummy\\Videos\\"+postedFile.FileName;
            string imagePath = "D:\\Watermarks\\30.png";
            string Id = Guid.NewGuid().ToString();

            //Convert videos from one format to another
            ffMpeg.ConvertMedia(pathToVideoFile, "D:\\Watermarks\\"+Id+".flv", Format.flv);

            //Add Aatermark to videos
            ffMpeg.Invoke("-i "+pathToVideoFile+ " -i "+ imagePath + " -filter_complex \"overlay=10:10\" D:\\Watermarks\\Images\\" + Id+".mp4");

            //Get video thumbnail
            ffMpeg.GetVideoThumbnail(pathToVideoFile, "D:\\Watermarks\\Images\\" + Id.Substring(Id.Length-5)+".jpg");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多