使用iTextSharp生成二维码时如何添加JPG等格式的图片?
问题解答
你无法直接将BarcodeQRCode构造函数的第一个字符串参数替换为图片实现需求,二维码本身仅支持存储文本类数据,不支持直接嵌入二进制图片内容。你可以根据实际需求选择以下两种方案实现:
方案1:二维码中间叠加JPG/PNG格式的Logo小图标
该方案是将小尺寸logo绘制在生成后的二维码中心区域,利用二维码的纠错能力保证正常扫码,是最常用的实现方式:
- 首先调整二维码纠错等级为最高级
ErrorCorrectionLevel.H,最大支持遮挡30%区域仍可正常识别,修改你的参数配置代码:
var paramQR = new Dictionary<EncodeHintType, object>(); paramQR.Add(EncodeHintType.CHARACTER_SET, "UTF-8"); // 替换为高纠错等级,适配中心logo叠加 paramQR.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); BarcodeQRCode qrcode = new BarcodeQRCode("你需要存储的文本/链接内容", 300, 300, paramQR);
- 生成二维码后加载你的logo图片,缩放后绘制到二维码中心位置即可,示例代码如下(以生成PDF场景为例):
// 获得原始二维码图像对象 Image qrImage = qrcode.GetImage(); // 加载本地JPG格式logo Image logo = Image.GetInstance("你的logo本地路径.jpg"); // 缩放logo到二维码尺寸的1/5,避免遮挡过多影响扫码 logo.ScaleToFit(qrImage.Width / 5, qrImage.Height / 5); // 计算居中坐标,设置logo位置 logo.SetAbsolutePosition( qrImage.AbsoluteX + (qrImage.Width - logo.ScaledWidth) / 2, qrImage.AbsoluteY + (qrImage.Height - logo.ScaledHeight) / 2 ); // 按顺序添加到画布:先加二维码,再加logo覆盖在上方 document.Add(qrImage); document.Add(logo);
- 注意:logo总面积不要超过二维码的15%,否则会大幅降低扫码成功率
方案2:扫码后显示对应图片
如果你的需求是用户扫描二维码后直接查看目标图片,只需要先将图片上传到可公网访问的存储位置,拿到图片的访问URL,将URL作为字符串参数传入BarcodeQRCode构造函数的第一个参数即可,用户扫码后会自动跳转加载对应图片。
内容的提问来源于stack exchange,提问作者Nima
相关产品推荐
相关产品推荐

