`
liuyfly
  • 浏览: 4579 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

google zxing 二维码 边框问题

阅读更多
最近用到了二维码的生成功能,用的是google zxing工具,结果生成的二维码老是有一个边框,没办法去掉。查了一下zxing的源码,发现边框是自动计算出来的,不能手动设置。差评~~

这个方法:
private static BitMatrix renderResult(QRCode code, int width, int height, int quietZone)


package com.google.zxing.qrcode;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.Writer;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.encoder.ByteMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.google.zxing.qrcode.encoder.Encoder;
import com.google.zxing.qrcode.encoder.QRCode;

import java.util.Map;

/**
 * This object renders a QR Code as a BitMatrix 2D array of greyscale values.
 *
 * @author dswitkin@google.com (Daniel Switkin)
 */
public final class QRCodeWriter implements Writer {

  private static final int QUIET_ZONE_SIZE = 4;

  @Override
  public BitMatrix encode(String contents, BarcodeFormat format, int width, int height)
      throws WriterException {

    return encode(contents, format, width, height, null);
  }

  @Override
  public BitMatrix encode(String contents,
                          BarcodeFormat format,
                          int width,
                          int height,
                          Map<EncodeHintType,?> hints) throws WriterException {

    if (contents.length() == 0) {
      throw new IllegalArgumentException("Found empty contents");
    }

    if (format != BarcodeFormat.QR_CODE) {
      throw new IllegalArgumentException("Can only encode QR_CODE, but got " + format);
    }

    if (width < 0 || height < 0) {
      throw new IllegalArgumentException("Requested dimensions are too small: " + width + 'x' +
          height);
    }

    ErrorCorrectionLevel errorCorrectionLevel = ErrorCorrectionLevel.L;
    int quietZone = QUIET_ZONE_SIZE;
    if (hints != null) {
      ErrorCorrectionLevel requestedECLevel = (ErrorCorrectionLevel) hints.get(EncodeHintType.ERROR_CORRECTION);
      if (requestedECLevel != null) {
        errorCorrectionLevel = requestedECLevel;
      }
      Integer quietZoneInt = (Integer) hints.get(EncodeHintType.MARGIN);
      if (quietZoneInt != null) {
        quietZone = quietZoneInt;
      }
    }

    QRCode code = Encoder.encode(contents, errorCorrectionLevel, hints);
    return renderResult(code, width, height, quietZone);
  }

  // Note that the input matrix uses 0 == white, 1 == black, while the output matrix uses
  // 0 == black, 255 == white (i.e. an 8 bit greyscale bitmap).
  private static BitMatrix renderResult(QRCode code, int width, int height, int quietZone) {
    ByteMatrix input = code.getMatrix();
    if (input == null) {
      throw new IllegalStateException();
    }
    int inputWidth = input.getWidth();
    int inputHeight = input.getHeight();
    int qrWidth = inputWidth + (quietZone << 1);
    int qrHeight = inputHeight + (quietZone << 1);
    int outputWidth = Math.max(width, qrWidth);
    int outputHeight = Math.max(height, qrHeight);

    int multiple = Math.min(outputWidth / qrWidth, outputHeight / qrHeight);
    // Padding includes both the quiet zone and the extra white pixels to accommodate the requested
    // dimensions. For example, if input is 25x25 the QR will be 33x33 including the quiet zone.
    // If the requested size is 200x160, the multiple will be 4, for a QR of 132x132. These will
    // handle all the padding from 100x100 (the actual QR) up to 200x160.
    int leftPadding = (outputWidth - (inputWidth * multiple)) / 2;
    int topPadding = (outputHeight - (inputHeight * multiple)) / 2;

    BitMatrix output = new BitMatrix(outputWidth, outputHeight);

    for (int inputY = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) {
      // Write the contents of this row of the barcode
      for (int inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {
        if (input.get(inputX, inputY) == 1) {
          output.setRegion(outputX, outputY, multiple, multiple);
        }
      }
    }

    return output;
  }

}
分享到:
评论

相关推荐

    Zxing二维码生成与解析

    Zxing(ZXing,发音为“zebra crossing”,意为斑马线)是Google开发的一款开源的、跨平台的二维码和条形码读取与生成库。本篇文章将深入探讨Zxing在二维码生成与解析方面的应用,旨在帮助读者理解和掌握这一实用...

    Zxing二维码

    本篇文章将详细介绍Zxing二维码的相关知识。 1. **二维码概述**: 二维码作为一种数据编码方式,可以存储比一维条码更多的信息,如网址、文本、联系人信息、电子邮件等。它由黑白相间的模块组成,能够被手机摄像头...

    java使用Zxing包生成和识别二维码

    此外,Zxing还支持更多的自定义设置,比如调整二维码的颜色、背景色、边框大小等,这些都可以根据具体需求来进行配置。总之,对于需要在Java应用中集成二维码生成和识别功能的开发者来说,Zxing无疑是一个非常优秀的...

    完整的利用itext5、zxing、QRCore制作pdf、二维码图片插入pdf,并解析pdf中的二维码信息

    首先,iText5是一款强大的Java库,主要用于创建和编辑PDF文档,而ZXing(Zebra Crossing)是一个开源的条码读取库,支持多种条码格式,包括二维码。QRCore是ZXing的一个轻量级版本,专为Android平台设计,简化了在...

    android Zxing扫描二维码条形码功能仿微信自定义扫码框扫描线边框样式Eclipse版本

    在本项目中,我们将讨论如何在Eclipse环境下,使用Zxing库实现类似微信的自定义扫码框和扫描线边框样式。 首先,我们需要在项目中引入Zxing库。由于这是Eclipse版本,你需要将Zxing的源代码导入到你的工程中,或者...

    zxing 生成二维码名片.rar

    ZXing,意为“斑马线”,是由Google开发的一款强大的条形码和二维码处理工具。它提供了一套完整的API,可以方便地在Java、Android、.NET等多种平台上集成,用于生成和解析二维码和条形码。ZXing库不仅适用于移动设备...

    java使用zxing生成二维码所需jar包

    6. **自定义样式**:ZXing允许你定制二维码的样式,如边框大小、背景色和前景色,以满足设计需求。 示例代码: ```java import com.google.zxing.*; import com.google.zxing.client.j2se.MatrixToImageConfig; ...

    google zxing读取、生成一维码、二维码图片

    ZXing(Zebra Crossing)是Google开发的一个开源项目,专门用于处理一维条形码和二维二维码的生成与读取。这个项目的名字来源于其英文名的首字母缩写,象征着“斑马线”,寓意在数据世界中指引信息的交汇。ZXing提供...

    android Zxing扫描二维码条形码功能仿微信自定义扫码框扫描线边框样式Android studio版本

    Zxing(又名ZXing,意为“zebra crossing”)是一个开源项目,提供了跨平台的多种条码读取功能,包括二维码和条形码。在这个项目中,我们将讨论如何在Android Studio环境下,利用Zxing库来实现一个仿微信的自定义扫...

    基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

    Google的Zxing(ZXing是“Zebra Crossing”的缩写,意为斑马线)是一个开源项目,提供了多种二维码和条形码的读取与生成能力。本教程将深入探讨如何基于Zxing在Android应用中实现类似微信的二维码扫描效果,以及如何...

    安卓Android源码——zxing生成二维码名片.zip

    ZXing是Google开发的一个开源项目,支持多种条形码和二维码的读取与生成。在Android应用中,我们可以直接引用ZXing的Android端库——`com.google.zxing:core`和`com.google.zxing:android-integration`,这两个库...

    eclipse下zxing扫描二维码第二版

    综上所述,"eclipse下zxing扫描二维码第二版"项目主要涉及Eclipse和Android开发环境的使用,ZXing库的优化和集成,以及针对扫描体验的改进。对于Android开发者来说,这是一个很好的学习和参考资源,可以帮助他们快速...

    Android高级应用源码-zxing 生成二维码名片.zip

    【Android高级应用源码-zxing 生成二维码名片.zip】是一个包含使用ZXing库在Android平台上创建二维码名片的源代码项目。ZXing(Zebra Crossing)是一个开源的、跨平台的条形码解码库,支持多种条形码和二维码格式。...

    仿新浪微博二维码

    “ZXing二维码”特指使用ZXing库生成的二维码。“创建二维码”涵盖了整个二维码生成的过程,包括选择合适的库、设置参数、编码数据以及可能的自定义设计。 综上所述,"仿新浪微博二维码"项目不仅涉及到二维码的基本...

    app.zip_ZXing _android_zxing扫描app_zxing扫码器app_二维码

    ZXing,全称为“Zebra Crossing”,是一款开源的、跨平台的条码和二维码处理库。在Android开发中,ZXing常被用于实现二维码扫描功能,使得应用能够快速读取和解析二维码中的信息。本篇文章将详细介绍ZXing在Android...

    android二维码开发,zxing开发由通讯录生成二维码名片源代码

    ZXing是Google开发的一个用于读取、写入多种格式的条形码和二维码的项目。它支持多种条码类型,包括一维的EAN, UPC等,以及二维的QR Code, Data Matrix, Aztec, PDF417等。在Android上,ZXing提供了一个名为`Barcode...

    如何利用Google chart API产生二维码

    Google Chart API 是一个强大的工具,能够帮助开发者轻松创建包括二维码在内的各种图表。本文将深入讲解如何利用Google Chart API来生成二维码,并结合前端技术实现用户交互。 首先,让我们了解什么是Google Chart ...

    二维码zxing解码

    1. 图像预处理:在读取二维码前,ZXing会先对图像进行预处理,包括裁剪、灰度化、二值化等操作,以便更好地识别二维码的边框和模块。 2. 定位:ZXing通过查找特定的定位图案(Finder Patterns)来确定二维码的位置...

    二维码解析Zxin2.2 能解析大图

    在Zxing 2.2中,开发者针对大图二维码的解析进行了优化,解决了许多现有的代码在处理高分辨率或大尺寸图像时遇到的问题。 对于大图二维码,常见的挑战包括图像失真、噪点、比例问题以及内存管理。Zxing 2.2通过改进...

    Java利用Zxing生成带Logo的二维码

    - **二维码样式自定义**: 除了Logo,还可以改变二维码的边框、对角线等元素,使其更加个性化。 - **响应式生成**: 如果用于网页,可以设计一个动态生成二维码的服务,根据用户设备的屏幕尺寸和分辨率生成合适的...

Global site tag (gtag.js) - Google Analytics