我想在图像上应用水印。
目前,我正在尝试使用此代码,但它在不同大小的图像上失败:
public void AddWaterMark(string filePath, string watermarkText)
{
Image img = Image.FromFile(
MapPath(GlobalVariables.UploadPath + "/" + filePath));
Graphics gr = Graphics.FromImage(img);
Font font = new Font("Alial Black", 40);
Color color = Color.FromArgb(50, 241, 235, 105);
StringFormat stringFormat = new StringFormat
{
Alignment = StringAlignment.Near,
LineAlignment = StringAlignment.Near
};
gr.SmoothingMode = SmoothingMode.AntiAlias;
gr.DrawString(watermarkText, font, new SolidBrush(color),
new Point(20, img.Height - 60), stringFormat);
img.Save(MapPath(GlobalVariables.UploadPath + "/w_" + filePath));
}
有时字体会从底部消失。我希望它是图像底部的文字。
我如何确保它不会脱离底部?
另外,我想略微增强它。我想在图像底部的整个长度上制作一个白色但透明的条形图,然后在其上面写上黑色文本。这可能与绘图有关吗?因此,图像底部的条形图可能高达60像素,而在60像素的中间,我希望写入文本(左对齐)。
我也发现文本移动arounf,具体取决于文件大小
这是一个有效的图像: http://www.listerhome.com/fulldisplay.aspx?imageid=100055
Bur有时,当我上传更高分辨率的图像时,我得到了这个: http://www.listerhome.com/fulldisplay.aspx?imageid=100060
答案 0 :(得分:1)
您可以使用MeasureString
函数计算字符串大小。
SizeF stringSize = gr.MeasureString(watermarkText, font, img.Width - 40);
gr.DrawString(watermarkText, font, new SolidBrush(color),
new RectangleF(20, img.Height - stringSize.Height, img.Width - 40, stringSize.Height),
stringFormat);