本文介绍了在生成的PNG旁边添加二维码中的文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我制作了一个在PNG图像中生成二维码的应用程序,但现在我必须将二维码中的文本插入到二维码图像的旁边。

我没有使用ZXing库的任何经验,但我想它可能包含此选项...

示例:

编码:

namespace QR_Code_with_WFA
{
    public void CreateQRImage(string inputData)
    {
        if (inputData.Trim() == String.Empty)
        {
            System.Windows.Forms.MessageBox.Show("Data must not be empty.");
        }

        BarcodeWriter qrcoder = new ZXing.BarcodeWriter
        {
            Format = BarcodeFormat.QR_CODE,
            Options = new ZXing.QrCode.QrCodeEncodingOptions
            {
                ErrorCorrection = ZXing.QrCode.Internal.ErrorCorrectionLevel.H,
                Height = 250,
                Width = 250
            }
        };

        string tempFileName = System.IO.Path.GetTempPath() + inputData + ".png";

        Image image;
        String data = inputData;
        var result = qrcoder.Write(inputData);
        image = new Bitmap(result);
        image.Save(tempFileName);

        System.Diagnostics.Process.Start(tempFileName);
    }
}

推荐答案

ZXing.BarcodeWriter.OptionsZXing.BarcodeWriter.Options具有属性PureBarcode,设置为false时会将源文本放入生成的图像中。

遗憾的是,条码格式为BarcodeFormat.QR_CODE时无效(且是设计出来的)。

但您可以在生成条形码图像后手动绘制文本:

var result = qrcoder.Write(inputData);

using (var g = Graphics.FromImage(result))
using (var font = new Font(FontFamily.GenericMonospace, 12))
using (var brush = new SolidBrush(Color.Black))
using(var format = new StringFormat(){Alignment = StringAlignment.Center})
{
    int margin = 5, textHeight = 20;

    var rect = new RectangleF(margin, result.Height - textHeight,
                              result.Width - 2 * margin, textHeight);

    g.DrawString(inputData, font, brush, rect, format);
}

result.Save(tempFileName);

注意:您可以选择自己的字体大小和字体系列,以更好地满足您的目标。

更新:

如果您尝试将文本放在图像的右侧-您必须首先将生成的图像向右扩展,然后绘制文本:

var result = qrcoder.Write(inputData);

int textWidth = 200, textHeight = 20;
// creating new bitmap having imcreased width
var img = new Bitmap(result.Width + textWidth, result.Height);

using (var g = Graphics.FromImage(img))
using (var font = new Font(FontFamily.GenericMonospace, 12))
using (var brush = new SolidBrush(Color.Black))
using (var bgBrush = new SolidBrush(Color.White))
using (var format = new StringFormat() { Alignment = StringAlignment.Near })
{
    // filling background with white color
    g.FillRectangle(bgBrush, 0, 0, img.Width, img.Height);
    // drawing your generated image over new one
    g.DrawImage(result, new Point(0,0));
    // drawing text
    g.DrawString(inputData, font, brush,  result.Width, (result.Height - textHeight) / 2, format);
}

img.Save(tempFileName);

这篇关于在生成的PNG旁边添加二维码中的文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-03 04:24