如何在不丢失分辨率的情况下调整 QRCode 图像的大小?

How to re-size QRCode image without losing resolution?

我正在使用 QR 码库“MessagingToolkit.QRCode.Codec”生成 QR 码,但它生成了一个大尺寸的 QR 码,我正在尝试将其调整为 70x70 像素,但生成的图像的分辨率不是好的。

protected void BtnPrint_Click(object sender, EventArgs e)
        {
            PrintDocument pd = new PrintDocument();
            pd.PrintPage += PrintPage;
            pd.Print();
        }

        private void PrintPage(object o, PrintPageEventArgs e)
        {
            QRCodeEncoder encoder = new QRCodeEncoder();
            String EmployeeId= this.Request.QueryString.Get("EmployeeId").ToString();
            Bitmap img = new Bitmap (encoder.Encode(EmployeeId), new Size(70,70));


            Point loc = new Point(100, 100);
            e.Graphics.DrawImage(img, loc);
        }

如何在不丢失分辨率的情况下调整此 QRCode 的大小?

编辑:

是否可以从头开始创建所需大小的二维码?

你可以

encoder.QRCodeScale = (number).

它控制用于创建图像的"scale"。

"scale" 直接控制点的大小(以像素为单位)。比例为 1 表示每个点为 1 个像素 wide/high.

请注意,尺寸计算中存在一个错误,因此图像可能在宽度和高度上都裁剪了 1 个像素(如果你看,最后的 row/column 是空白的)

QRCodeEncoder encoder = new QRCodeEncoder();
encoder.QRCodeScale = 1;

using (var bmp = encoder.Encode(EmployeeId))
{
    // There is a bug in QRCodeEncoder, so that it will add an
    // additional "blank" row/column
    var bmp2 = bmp.Clone(new Rectangle(0, 0, bmp.Width - 1, bmp.Height - 1), bmp.PixelFormat))

    // use bmp2 
}

如果您比较我们在图形程序中创建的这些 QR 码,您会发现分辨率的差异。第一个 (2488) 的比例为 35,第二个 (2490) 的比例为 40。这意味着每个模块为 35 或 40 像素正方形。如果您正在为广告牌(而不是名片)制作 QR 码,您需要确保每个模块的分辨率足够高,以便在打印非常大时不会 'pixelate'(模糊) .不利的一面是你正在创建一个更大的图像,如果你正在创建(和保存)很多图像(比如 Codacast),它将占用更多的内存 - 希望这有帮助:-)

http://www.codacast.com/qrimages/2488.png http://www.codacast.com/qrimages/2490.png