【问题标题】:Creating colored QR codes using zxing使用 zxing 创建彩色二维码
【发布时间】:2015-09-16 20:53:25
【问题描述】:

我使用的是google开源java zxing creator:http://code.google.com/p/zxing/

创建二维码。我已经准备好了一切并且可以正常工作(我正在使用 Coldfusion 加载 Java 文件并将图像写入浏览器。)

我现在想要的是将黑色 QR 颜色更改为其他颜色。有没有简单的方法可以做到这一点?

我需要编辑编码器 java 文件的反编译版本吗?或者有没有办法可以在编码例程中添加颜色参数?

谢谢 肖恩

【问题讨论】:

  • 您找到解决方案了吗?我需要完全一样的。

标签: colors qr-code zxing


【解决方案1】:

MatrixToImageWriter.java(我假设您正在使用)中,在javase/ 下更改常量BLACK。它是 ARGB 格式的 int,当前值为 0xFF000000。将 alpha 值保留为 0xFF。更改其余部分以十六进制格式描述您的颜色。如果你愿意,你可以对WHITE 做同样的事情。

【讨论】:

  • 是的,我正在使用 'com.google.zxing.client.j2se.MatrixToImageWriter' java 文件。我已经下载了预编译的版本,但我想我可以从这里获取源文件:(code.google.com/p/zxing/source/checkout) 并对其进行编辑以使用自定义颜色重新编译文件。你会这样做吗?
【解决方案2】:

试试这个 ::

BitMatrix matrix = new QRCodeWriter().encode(data, BarcodeFormat.QR_CODE, this.width, this.height, getEncodeHints());
/*
Here the config object represents the QR Code colors.
i.e. Brown and White respectively
*/ 
MatrixToImageConfig conf = new MatrixToImageConfig(-10223615,-1);
BufferedImage qrcode = MatrixToImageWriter.toBufferedImage(matrix, conf);

【讨论】:

  • 你能不能再补充一个解释?
【解决方案3】:

我假设您正在生成如下二维码:

QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(code,null,
                                                Contents.Type.TEXT,
                                                BarcodeFormat.QR_CODE.toString(),            
                                                yourDimension);

您的输出尺寸将基于您的代码。将尺寸设置得尽可能低。所以你可以找到你想要改变颜色的二维码位置的确切位置。

比从位图中获取像素:

int[] allpixels = new int[bitmap.getHeight() * bitmap.getWidth()];
bitmap.getPixels(allpixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());

以及你想要的颜色像素:

for (int i = 6; i < 9; i++) {
     allpixels[i] = Color.Red; // your rgb color
      }

将每个设备的 dp 转换为 px:

qrCodeDimension = dpToPx((int) getResources().getDimension(R.dimen.qr_dimen));

public static int dpToPx(int dp) {
      return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
   }

最后将彩色像素设置为位图:

bitmap.setPixels(allpixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());

return Bitmap.createScaledBitmap(bitmap, qrCodeDimension, qrCodeDimension, false);

这就是我解决问题的方法。我希望这会对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 2015-03-15
    • 1970-01-01
    相关资源
    最近更新 更多