使用双线字体在图像上绘制水印字符串

dhr*_*lap 1 .net graphics system.drawing

我需要在双线字体的图像上绘制水印字符串.字体应该是可配置的,但字符应始终使用双线绘制.我正在附加图像结果图像应该是什么样子:

带双线字体的水印

Han*_*ant 5

您可以通过将文本转换为路径并使用部分透明笔绘制路径来实现此目的.要使用的核心API是Graphics.AddText().以下是使用它的示例方法:

    public static Bitmap Watermark(Image srce, string text, Font font, float angle) {
        Bitmap dest = new Bitmap(srce);
        var color = Color.FromArgb(120, Color.White);
        using (var gr = Graphics.FromImage(dest)) 
        using (var gp = new GraphicsPath())
        using (var pen = new Pen(color, 5)) {
            var sf = new StringFormat();
            sf.LineAlignment = sf.Alignment = StringAlignment.Center;
            gp.AddString(text, font.FontFamily, (int)font.Style, font.SizeInPoints, 
                         new Rectangle(-dest.Width/2, -dest.Height/2, dest.Width, dest.Height), 
                         sf);
            gr.TranslateTransform(dest.Width / 2, dest.Height / 2);
            gr.RotateTransform(-angle);
            gr.DrawPath(pen, gp);
        }
        return dest;
    }
Run Code Online (Sandbox Code Playgroud)

样品用法:

    using (var bmp = Properties.Resources.Penguins) 
    using (var font = new Font(new FontFamily("Arial"), 144)) {
        pictureBox1.Image = Watermark(bmp, "DEMO", font, 45);
    }
Run Code Online (Sandbox Code Playgroud)

哪个产生:

在此输入图像描述