最近用到了二维码的生成功能,用的是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,发音为“zebra crossing”,意为斑马线)是Google开发的一款开源的、跨平台的二维码和条形码读取与生成库。本篇文章将深入探讨Zxing在二维码生成与解析方面的应用,旨在帮助读者理解和掌握这一实用...
本篇文章将详细介绍Zxing二维码的相关知识。 1. **二维码概述**: 二维码作为一种数据编码方式,可以存储比一维条码更多的信息,如网址、文本、联系人信息、电子邮件等。它由黑白相间的模块组成,能够被手机摄像头...
此外,Zxing还支持更多的自定义设置,比如调整二维码的颜色、背景色、边框大小等,这些都可以根据具体需求来进行配置。总之,对于需要在Java应用中集成二维码生成和识别功能的开发者来说,Zxing无疑是一个非常优秀的...
首先,iText5是一款强大的Java库,主要用于创建和编辑PDF文档,而ZXing(Zebra Crossing)是一个开源的条码读取库,支持多种条码格式,包括二维码。QRCore是ZXing的一个轻量级版本,专为Android平台设计,简化了在...
在本项目中,我们将讨论如何在Eclipse环境下,使用Zxing库实现类似微信的自定义扫码框和扫描线边框样式。 首先,我们需要在项目中引入Zxing库。由于这是Eclipse版本,你需要将Zxing的源代码导入到你的工程中,或者...
ZXing,意为“斑马线”,是由Google开发的一款强大的条形码和二维码处理工具。它提供了一套完整的API,可以方便地在Java、Android、.NET等多种平台上集成,用于生成和解析二维码和条形码。ZXing库不仅适用于移动设备...
6. **自定义样式**:ZXing允许你定制二维码的样式,如边框大小、背景色和前景色,以满足设计需求。 示例代码: ```java import com.google.zxing.*; import com.google.zxing.client.j2se.MatrixToImageConfig; ...
ZXing(Zebra Crossing)是Google开发的一个开源项目,专门用于处理一维条形码和二维二维码的生成与读取。这个项目的名字来源于其英文名的首字母缩写,象征着“斑马线”,寓意在数据世界中指引信息的交汇。ZXing提供...
Zxing(又名ZXing,意为“zebra crossing”)是一个开源项目,提供了跨平台的多种条码读取功能,包括二维码和条形码。在这个项目中,我们将讨论如何在Android Studio环境下,利用Zxing库来实现一个仿微信的自定义扫...
Google的Zxing(ZXing是“Zebra Crossing”的缩写,意为斑马线)是一个开源项目,提供了多种二维码和条形码的读取与生成能力。本教程将深入探讨如何基于Zxing在Android应用中实现类似微信的二维码扫描效果,以及如何...
ZXing是Google开发的一个开源项目,支持多种条形码和二维码的读取与生成。在Android应用中,我们可以直接引用ZXing的Android端库——`com.google.zxing:core`和`com.google.zxing:android-integration`,这两个库...
综上所述,"eclipse下zxing扫描二维码第二版"项目主要涉及Eclipse和Android开发环境的使用,ZXing库的优化和集成,以及针对扫描体验的改进。对于Android开发者来说,这是一个很好的学习和参考资源,可以帮助他们快速...
【Android高级应用源码-zxing 生成二维码名片.zip】是一个包含使用ZXing库在Android平台上创建二维码名片的源代码项目。ZXing(Zebra Crossing)是一个开源的、跨平台的条形码解码库,支持多种条形码和二维码格式。...
“ZXing二维码”特指使用ZXing库生成的二维码。“创建二维码”涵盖了整个二维码生成的过程,包括选择合适的库、设置参数、编码数据以及可能的自定义设计。 综上所述,"仿新浪微博二维码"项目不仅涉及到二维码的基本...
ZXing,全称为“Zebra Crossing”,是一款开源的、跨平台的条码和二维码处理库。在Android开发中,ZXing常被用于实现二维码扫描功能,使得应用能够快速读取和解析二维码中的信息。本篇文章将详细介绍ZXing在Android...
ZXing是Google开发的一个用于读取、写入多种格式的条形码和二维码的项目。它支持多种条码类型,包括一维的EAN, UPC等,以及二维的QR Code, Data Matrix, Aztec, PDF417等。在Android上,ZXing提供了一个名为`Barcode...
Google Chart API 是一个强大的工具,能够帮助开发者轻松创建包括二维码在内的各种图表。本文将深入讲解如何利用Google Chart API来生成二维码,并结合前端技术实现用户交互。 首先,让我们了解什么是Google Chart ...
1. 图像预处理:在读取二维码前,ZXing会先对图像进行预处理,包括裁剪、灰度化、二值化等操作,以便更好地识别二维码的边框和模块。 2. 定位:ZXing通过查找特定的定位图案(Finder Patterns)来确定二维码的位置...
在Zxing 2.2中,开发者针对大图二维码的解析进行了优化,解决了许多现有的代码在处理高分辨率或大尺寸图像时遇到的问题。 对于大图二维码,常见的挑战包括图像失真、噪点、比例问题以及内存管理。Zxing 2.2通过改进...
- **二维码样式自定义**: 除了Logo,还可以改变二维码的边框、对角线等元素,使其更加个性化。 - **响应式生成**: 如果用于网页,可以设计一个动态生成二维码的服务,根据用户设备的屏幕尺寸和分辨率生成合适的...