java生成二维码图片清晰度问题

我的程序生成的二维码图片很模糊,用二维码生成器生成的图片很清晰,请问如何设置图片的清晰度呢?
如图,两张清晰度差别甚大!
望高手不吝赐教!非常感谢!!!
java生成二维码图片清晰度问题

部分源码:
/**
 * 生成二维码(QRCode)图片的公共方法
 * @param content 存储内容
 * @param imgType 图片类型
 * @param size 二维码尺寸
 * @return
 */
private BufferedImage qRCodeCommon(String content, String imgType, int size) {
BufferedImage bufImg = null;
try {
Qrcode qrcodeHandler = new Qrcode();
// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
qrcodeHandler.setQrcodeErrorCorrect('M');
qrcodeHandler.setQrcodeEncodeMode('B');
// 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大
qrcodeHandler.setQrcodeVersion(size);
// 获得内容的字节数组,设置编码格式
byte[] contentBytes = content.getBytes("utf-8");
// 图片尺寸
int imgSize = 67 + 12 * (size - 1);
bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bufImg.createGraphics();
// 设置背景颜色
gs.setBackground(Color.WHITE);
gs.clearRect(0, 0, imgSize, imgSize);

// 设定图像颜色> BLACK
gs.setColor(Color.BLACK);
// 设置偏移量,不设置可能导致解析出错
int pixoff = 2;
// 输出内容> 二维码
if (contentBytes.length > 0 && contentBytes.length < 800) {
boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
for (int i = 0; i < codeOut.length; i++) {
for (int j = 0; j < codeOut.length; j++) {
if (codeOut[j][i]) {
gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
}
}
}
} else {
throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [0, 800].");
}
gs.dispose();
bufImg.flush();
} catch (Exception e) {
e.printStackTrace();
}
return bufImg;
}

回答: java生成二维码图片清晰度问题

  1. 最后需要对图像处理一下,让白的更白,黑的更黑,图片只有两种颜色,(0, 0, 0), (255, 255, 255),没有任何其他中间颜色。Java有函数操作卷积算法,对图像进行处理,例如模糊,锐化,浮雕等。
    这有个简单的处理图像的程序,可以参考一下:
    package com.tur.demo;

    import javax.swing.*;
    import java.awt.*;
    import java.awt.color.ColorSpace;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.image.*;
    import java.io.IOException;

    public class ImageFilterTest {
        private static ImageFilter imageFilter = new ImageFilter("/Users/Biao/Desktop/x.png");
        private static JLabel imageLabel = new JLabel();

        private static enum FilterType {
            ORIGINAL("Original Image"),
            GRAY("Gray Image"),
            BLUR("Blur Image"),
            SHARP("Sharp Image"),
            EMBOSS("Emboss Image");

            private String description;

            private FilterType(String description) {
                this.description = description;
            }

            @Override
            public String toString() {
                return description;
            }
        };

        public static JButton createImageFilterButton(final FilterType type) {
            JButton button = new JButton(type.toString());

            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent event) {
                    Image image = null;

                    switch (type) {
                        case ORIGINAL:
                            image = imageFilter.getOriginalImage();
                            break;
                        case GRAY:
                            image = imageFilter.getGrayImage();
                            break;
                        case BLUR:
                            image = imageFilter.getBlurImage();
                            break;
                        case SHARP:
                            image = imageFilter.getSharpImage();
                            break;
                        case EMBOSS:
                            image = imageFilter.getEmbossImage();
                            break;
                        default:
                            image = imageFilter.getOriginalImage();
                            break;
                    }

                    imageLabel.setIcon(new ImageIcon(image));
                }
            });

            return button;
        }

        private static void createAndShowGui() throws IOException {
            JFrame frame = new JFrame("Image filter");

            imageLabel.setIcon(new ImageIcon(imageFilter.getOriginalImage()));
            frame.getContentPane().add(imageLabel, BorderLayout.CENTER);

            JPanel buttonsPanel = new JPanel(new GridLayout(2, 3));
            buttonsPanel.add(createImageFilterButton(FilterType.ORIGINAL));
            buttonsPanel.add(createImageFilterButton(FilterType.GRAY));
            buttonsPanel.add(createImageFilterButton(FilterType.BLUR));
            buttonsPanel.add(createImageFilterButton(FilterType.SHARP));
            buttonsPanel.add(createImageFilterButton(FilterType.EMBOSS));
            frame.getContentPane().add(buttonsPanel, BorderLayout.SOUTH);

            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(500, 500);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }

        public static void main(String[] args) throws Exception {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        createAndShowGui();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }

    class ImageFilter {
        private BufferedImage bufImage;

        public ImageFilter(String imagePath) {
            bufImage = imageToBufferedImage(new ImageIcon(imagePath).getImage());
        }

        public BufferedImage getOriginalImage() {
            return bufImage;
        }

        public BufferedImage getSharpImage() {
            Kernel kernel = new Kernel(3, 3, new float[]{
                    -1, -1, -1,
                    -1, 9, -1,
                    -1, -1, -1
            });

            BufferedImageOp op = new ConvolveOp(kernel);
            return op.filter(bufImage, null);
        }

        public BufferedImage getBlurImage() {
            Kernel kernel = new Kernel(3, 3, new float[]{
                    1f / 9f, 1f / 9f, 1f / 9f,
                    1f / 9f, 1f / 9f, 1f / 9f,
                    1f / 9f, 1f / 9f, 1f / 9f
            });

            BufferedImageOp op = new ConvolveOp(kernel);
            return op.filter(bufImage, null);
        }

        public BufferedImage getGrayImage() {
            ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
            ColorConvertOp op = new ColorConvertOp(cs, null);
            return op.filter(bufImage, null);
        }

        public BufferedImage getEmbossGrayImage() {
            Kernel kernel = new Kernel(3, 3, new float[]{
                    -2, 0, 0,
                    0, 1, 0,
                    0, 0, 2
            });

            BufferedImageOp op = new ConvolveOp(kernel);
            return op.filter(bufImage, null);
        }

        public BufferedImage getEmbossImage() {
            Kernel kernel = new Kernel(3, 3, new float[]{
                    0,  -1, 0,
                    -1, 5, -1,
                    0, -1,  0
            });

            BufferedImageOp op = new ConvolveOp(kernel);
            return op.filter(bufImage, null);
        }

        /**
         * Convert the image to an buffered image.
         * @param image An instance of the class Image
         * @return An instance of the class BufferedImage that is converted from an image.
         */
        public static BufferedImage imageToBufferedImage(Image image) {
            int width = image.getWidth(null);
            int height = image.getHeight(null);

            BufferedImage buf = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics g = buf.createGraphics();
            g.drawImage(image, 0, 0, width, height, null);
            g.dispose();

            return buf;
        }
    }

求思路,如何在自己的软件中调用二维码生成器生成二维码图片

  1. Q
    怎样用软件中的参数自动填入二维码生成器的文本生成框里,然后生成的二维码图片呈现到自己的软件里
    是需要调用下载来的二维码生成器exe?那怎样用代码实现填入文本?
    是在自己的代码里写二维码生成算法?还是另外的思路,求大神解答
  2. A
    这里,我只关心.net。

    如果在linux下,那么实际上我给出链接实际上对你来说就更有启发了。因为它实际上就是在广为流传的java版本上修改成.net的。

怎么根据微信id代码自动生成生成关注微信公众号二维码图片

  1. Q
    怎么根据微信id代码自动生成生成关注微信公众号二维码图片
  2. A
    http://www.cnblogs.com/txw1958/p/weixin-qrcode-with-parameters.html

用MakeQRBarcode生成二维码有字数限制?扫出来是空白

  1. Q
    用MakeQRBarcode.dll生成二维码是否有字数限制?超过120字符数的时候,生成的二维码感觉不是太稳定,有时生成的二维码扫出来是空白的,但又不是绝对,偶尔生成180多个字符的二维码扫描又正常,现在没摸透它到底是什么情况下有问题,是否可通过以下参数去调整的?
    Subroutine Make(string ucData, long nDataLen,long nErrLevel,long nMask, integer nBarEdition,  string szBmpFileName, long nScale) library "MakeQRBarcode.dll" alias for "Make;Ansi"
  2. A
    发现当用我查查扫描显示空白时,其他软件如微信、百度也扫描不了,应该就是无法识别,为什么会这样,内容不一样,生成的二维码就变成无法识别了呢


    二维码建议不要超过100个字,如果超过了,建议把图片弄大些,因为字数越多,二维码越复杂,要求的分辨率也高,达不到时就会扫不出来

asp 如何生成二维码,!

  1. Q
    asp 如何生成二维码,
    小弟在线等  把分全给了  急~!
  2. A
    先做一个二维码,再把你要连接的地址接进去就好了。

Python使用qrcode生成二维码出现“OSError: encoder zip not available”错误

  1. Q
    小弟Python新手,已学完Python简明教程,所以就想做点小东西,在网上无意间看到生成二维码的例子,就尝试了一下,谁知天遂人愿,一直出错,还请大神不吝赐教。
    已安装Pillow2.3.1,看到说明Pillow是从PIL分支出来的,所以没安装PIL。qrcode也已安装。
    Python3.4
    源程序:
    import qrcode
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=4,
    )
    qr.add_data('test data')
    qr.make(fit=True)
    img = qr.make_image()
    print('img=',img)
    img.save('testpng.png')

    异常栈:
    img= <qrcode.image.pil.PilImage object at 0x0000000002D14080>
    Traceback (most recent call last):
      File "C:\Python34\lib\site-packages\pillow-2.3.1-py3.4-win-amd64.egg\PIL\ImageFile.py", line 454, in _save
    AttributeError: '_idat' object has no attribute 'fileno'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "C:\Python34\lib\site-packages\pillow-2.3.1-py3.4-win-amd64.egg\PIL\Image.py", line 404, in _getencoder
    AttributeError: 'module' object has no attribute 'zip_encoder'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "D:\Python Workspace\PyTest\src\qrcode2\__init__.py", line 12, in <module>
        img.save('testpng.png')
      File "C:\Python34\lib\site-packages\qrcode-4.0.4.post-py3.4.egg\qrcode\image\pil.py", line 29, in save
      File "C:\Python34\lib\site-packages\pillow-2.3.1-py3.4-win-amd64.egg\PIL\Image.py", line 1468, in save
      File "C:\Python34\lib\site-packages\pillow-2.3.1-py3.4-win-amd64.egg\PIL\PngImagePlugin.py", line 624, in _save
      File "C:\Python34\lib\site-packages\pillow-2.3.1-py3.4-win-amd64.egg\PIL\ImageFile.py", line 459, in _save
      File "C:\Python34\lib\site-packages\pillow-2.3.1-py3.4-win-amd64.egg\PIL\Image.py", line 408, in _getencoder
    OSError: encoder zip not available
  2. A
    64位python3.4+pillow2.4,win7下测试正常...

pb生成二维码

  1. Q
             那位大虾有 pb生成二维码 的方法,步骤,和原代码?
  2. A
    可以参考这个
    http://download.csdn.net/detail/my_aa/8656271

pb中picture不能显示二维码图片

  1. Q
    二维码图片是一个*.bmp文件,但在pb中的picture控件,却不能显示这个图片,求教有什么方法吗?
  2. A
    看一下是什么图片格式,然后把办法转换为bmp,再显示,或者用其它控件来显示

asp如何生成二维码

  1. Q
    asp如何生成二维码
    小弟在线等  把分全给了  急~!
  2. A
    那就是支持二维码的扫描仪。

    谁提供需要你考虑清楚,尽量让自己的利益最大化,然后和对方去谈的呀,哈哈

windows phone 怎么生成二维码

  1. Q
    有没有什么库可以方便的生成二维码,QrCode.Net这个找了一下,更本就没有支持wp的吧,还是我没找到
  2. A
    http://fankai.me/2012/06/google-chart-qrcode-mecard/