白条,然后文字水印?

时间:2011-12-28 05:53:05

标签: c# asp.net graphics

我想在图像上应用水印。

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

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

1 个答案:

答案 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);