白色条,然后文字水印

本文关键字:文字 然后 白色 | 更新日期: 2023-09-27 18:18:51

我想为图像应用水印。

目前,我正试图使用此代码,但它在不同大小的图像上失败:

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像素,在60px的中间,我想要写文字(左对齐)。

我也发现文本移动,取决于文件大小

这是一个有效的图像:http://www.listerhome.com/fulldisplay.aspx?imageid=100055

但有时,当我上传更高分辨率的图像时,我得到这个:http://www.listerhome.com/fulldisplay.aspx?imageid=100060

白色条,然后文字水印

可以使用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);