Search in sources :

Example 16 with EncodeHintType

use of com.google.zxing.EncodeHintType in project zxingfragmentlib by mitoyarzun.

the class QRCodeEncoder method encodeAsBitmap.

Bitmap encodeAsBitmap() throws WriterException {
    String contentsToEncode = contents;
    if (contentsToEncode == null) {
        return null;
    }
    Map<EncodeHintType, Object> hints = null;
    String encoding = guessAppropriateEncoding(contentsToEncode);
    if (encoding != null) {
        hints = new EnumMap<>(EncodeHintType.class);
        hints.put(EncodeHintType.CHARACTER_SET, encoding);
    }
    BitMatrix result;
    try {
        result = new MultiFormatWriter().encode(contentsToEncode, format, dimension, dimension, hints);
    } catch (IllegalArgumentException iae) {
        // Unsupported format
        return null;
    }
    int width = result.getWidth();
    int height = result.getHeight();
    int[] pixels = new int[width * height];
    for (int y = 0; y < height; y++) {
        int offset = y * width;
        for (int x = 0; x < width; x++) {
            pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
        }
    }
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
    return bitmap;
}
Also used : Bitmap(android.graphics.Bitmap) EncodeHintType(com.google.zxing.EncodeHintType) MultiFormatWriter(com.google.zxing.MultiFormatWriter) BitMatrix(com.google.zxing.common.BitMatrix)

Example 17 with EncodeHintType

use of com.google.zxing.EncodeHintType in project KeyBox by skavanagh.

the class OTPAction method qrImage.

@Action(value = "/admin/qrImage")
public String qrImage() {
    String username = UserDB.getUser(AuthUtil.getUserId(servletRequest.getSession())).getUsername();
    String secret = AuthUtil.getOTPSecret(servletRequest.getSession());
    AuthUtil.setOTPSecret(servletRequest.getSession(), null);
    try {
        String qrCodeText = "otpauth://totp/KeyBox%20%28" + URLEncoder.encode(servletRequest.getHeader("host").replaceAll("\\:.*$", ""), "utf-8") + "%29:" + username + "?secret=" + secret;
        QRCodeWriter qrWriter = new QRCodeWriter();
        Hashtable<EncodeHintType, String> hints = new Hashtable<>();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
        BitMatrix matrix = qrWriter.encode(qrCodeText, BarcodeFormat.QR_CODE, QR_IMAGE_WIDTH, QR_IMAGE_HEIGHT, hints);
        servletResponse.setContentType("image/png");
        BufferedImage image = new BufferedImage(QR_IMAGE_WIDTH, QR_IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics = (Graphics2D) image.getGraphics();
        graphics.setColor(Color.WHITE);
        graphics.fillRect(0, 0, QR_IMAGE_WIDTH, QR_IMAGE_HEIGHT);
        graphics.setColor(Color.BLACK);
        for (int x = 0; x < QR_IMAGE_WIDTH; x++) {
            for (int y = 0; y < QR_IMAGE_HEIGHT; y++) {
                if (matrix.get(x, y)) {
                    graphics.fillRect(x, y, 1, 1);
                }
            }
        }
        ImageIO.write(image, "png", servletResponse.getOutputStream());
        servletResponse.getOutputStream().flush();
        servletResponse.getOutputStream().close();
    } catch (Exception ex) {
        log.error(ex.toString(), ex);
    }
    return null;
}
Also used : QRCodeWriter(com.google.zxing.qrcode.QRCodeWriter) EncodeHintType(com.google.zxing.EncodeHintType) Hashtable(java.util.Hashtable) BitMatrix(com.google.zxing.common.BitMatrix) BufferedImage(java.awt.image.BufferedImage) Action(org.apache.struts2.convention.annotation.Action)

Example 18 with EncodeHintType

use of com.google.zxing.EncodeHintType in project CloudReader by youlookwhat.

the class QRCodeUtil method createQRImage.

/**
     * 生成二维码Bitmap
     *
     * @param content   内容
     * @param widthPix  图片宽度
     * @param heightPix 图片高度
     * @param logoBm    二维码中心的Logo图标(可以为null)
     * @param filePath  用于存储二维码图片的文件路径
     * @return 生成二维码及保存文件是否成功
     */
public static boolean createQRImage(String content, int widthPix, int heightPix, Bitmap logoBm, String filePath) {
    try {
        if (content == null || "".equals(content)) {
            return false;
        }
        //配置参数
        Map<EncodeHintType, Object> hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        //容错级别
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        //设置空白边距的宽度
        //            hints.put(EncodeHintType.MARGIN, 2); //default is 4
        // 图像数据转换,使用了矩阵转换
        BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, widthPix, heightPix, hints);
        int[] pixels = new int[widthPix * heightPix];
        // 两个for循环是图片横列扫描的结果
        for (int y = 0; y < heightPix; y++) {
            for (int x = 0; x < widthPix; x++) {
                if (bitMatrix.get(x, y)) {
                    pixels[y * widthPix + x] = 0xff000000;
                } else {
                    pixels[y * widthPix + x] = 0xffffffff;
                }
            }
        }
        // 生成二维码图片的格式,使用ARGB_8888
        Bitmap bitmap = Bitmap.createBitmap(widthPix, heightPix, Bitmap.Config.ARGB_8888);
        bitmap.setPixels(pixels, 0, widthPix, 0, 0, widthPix, heightPix);
        if (logoBm != null) {
            bitmap = addLogo(bitmap, logoBm);
        }
        //必须使用compress方法将bitmap保存到文件中再进行读取。直接返回的bitmap是没有任何压缩的,内存消耗巨大!
        return bitmap != null && bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(filePath));
    } catch (WriterException | IOException e) {
        e.printStackTrace();
    }
    return false;
}
Also used : HashMap(java.util.HashMap) BitMatrix(com.google.zxing.common.BitMatrix) IOException(java.io.IOException) QRCodeWriter(com.google.zxing.qrcode.QRCodeWriter) Bitmap(android.graphics.Bitmap) EncodeHintType(com.google.zxing.EncodeHintType) FileOutputStream(java.io.FileOutputStream) WriterException(com.google.zxing.WriterException)

Example 19 with EncodeHintType

use of com.google.zxing.EncodeHintType in project zxing by zxing.

the class ChartServlet method doEncode.

private static void doEncode(ServletRequest request, HttpServletResponse response, boolean isPost) throws IOException {
    ChartServletRequestParameters parameters;
    try {
        parameters = doParseParameters(request, isPost);
    } catch (IllegalArgumentException | NullPointerException e) {
        response.sendError(HttpServletResponse.SC_BAD_REQUEST, e.toString());
        return;
    }
    Map<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
    hints.put(EncodeHintType.MARGIN, parameters.getMargin());
    if (!StandardCharsets.ISO_8859_1.equals(parameters.getOutputEncoding())) {
        // Only set if not QR code default
        hints.put(EncodeHintType.CHARACTER_SET, parameters.getOutputEncoding().name());
    }
    hints.put(EncodeHintType.ERROR_CORRECTION, parameters.getEcLevel());
    BitMatrix matrix;
    try {
        matrix = new QRCodeWriter().encode(parameters.getText(), BarcodeFormat.QR_CODE, parameters.getWidth(), parameters.getHeight(), hints);
    } catch (WriterException we) {
        response.sendError(HttpServletResponse.SC_BAD_REQUEST, we.toString());
        return;
    }
    ByteArrayOutputStream pngOut = new ByteArrayOutputStream();
    MatrixToImageWriter.writeToStream(matrix, "PNG", pngOut);
    byte[] pngData = pngOut.toByteArray();
    response.setContentType("image/png");
    response.setContentLength(pngData.length);
    response.setHeader("Cache-Control", "public");
    response.getOutputStream().write(pngData);
}
Also used : BitMatrix(com.google.zxing.common.BitMatrix) ByteArrayOutputStream(java.io.ByteArrayOutputStream) QRCodeWriter(com.google.zxing.qrcode.QRCodeWriter) EncodeHintType(com.google.zxing.EncodeHintType) EnumMap(java.util.EnumMap) WriterException(com.google.zxing.WriterException)

Example 20 with EncodeHintType

use of com.google.zxing.EncodeHintType in project zxing by zxing.

the class DataMatrixWriterTestCase method testDataMatrixWriter.

@Test
public void testDataMatrixWriter() {
    Map<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
    hints.put(EncodeHintType.DATA_MATRIX_SHAPE, SymbolShapeHint.FORCE_SQUARE);
    int bigEnough = 14;
    DataMatrixWriter writer = new DataMatrixWriter();
    BitMatrix matrix = writer.encode("Hello Me", BarcodeFormat.DATA_MATRIX, bigEnough, bigEnough, hints);
    assertNotNull(matrix);
    assertEquals(bigEnough, matrix.getWidth());
    assertEquals(bigEnough, matrix.getHeight());
}
Also used : EncodeHintType(com.google.zxing.EncodeHintType) BitMatrix(com.google.zxing.common.BitMatrix) EnumMap(java.util.EnumMap) SymbolShapeHint(com.google.zxing.datamatrix.encoder.SymbolShapeHint) Test(org.junit.Test)

Aggregations

EncodeHintType (com.google.zxing.EncodeHintType)25 BitMatrix (com.google.zxing.common.BitMatrix)23 Bitmap (android.graphics.Bitmap)13 QRCodeWriter (com.google.zxing.qrcode.QRCodeWriter)11 Hashtable (java.util.Hashtable)9 EnumMap (java.util.EnumMap)8 MultiFormatWriter (com.google.zxing.MultiFormatWriter)7 WriterException (com.google.zxing.WriterException)7 Test (org.junit.Test)5 BufferedImage (java.awt.image.BufferedImage)3 HashMap (java.util.HashMap)3 BinaryBitmap (com.google.zxing.BinaryBitmap)2 SymbolShapeHint (com.google.zxing.datamatrix.encoder.SymbolShapeHint)2 FileOutputStream (java.io.FileOutputStream)2 IOException (java.io.IOException)2 Matrix (android.graphics.Matrix)1 JCommander (com.beust.jcommander.JCommander)1 Throwables (com.google.common.base.Throwables)1 BarcodeFormat (com.google.zxing.BarcodeFormat)1 ResultPoint (com.google.zxing.ResultPoint)1