package com;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Hashtable;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import javax.servlet.ServletContext;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
public class ZxingEncoderHandler{
// private ServletContext servletContext;
/** 编码
* @param contents
* @param width
* @param height
* @param imgPath
* @throws WriterException
* @throws IOException
*/
public BufferedImage process(String contents, int width, int height) throws WriterException, IOException{
Hashtable<Object, Object> hints = new Hashtable<Object, Object>();
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 指定纠错等级
hints.put(EncodeHintType.CHARACTER_SET, "GBK"); // 指定编码格式
BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,BarcodeFormat.QR_CODE, width, height, hints);
int BLACK = 0xFF000000;
int WHITE = 0xFFFFFFFF;
BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x, y, bitMatrix.get(x, y)?BLACK:WHITE);
}
}
return image;
}
public BufferedImage process_new(String contents, int width, int height) throws WriterException, IOException{
Hashtable<Object, Object> hints = new Hashtable<Object, Object>();
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.CHARACTER_SET, "GBK");
BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,BarcodeFormat.QR_CODE, width, height, hints);
int BLACK = 0xFF000000;
int WHITE = 0xFFFFFFFF;
BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x, y, bitMatrix.get(x, y)?BLACK:WHITE);
}
}
int m = 0;
for (int x = 0; x < width; x++) {
if(bitMatrix.get(x, x)){
m = x;
break;
}
}
image=cutWhiteSpace_new(image,"png",m);
return image;
}
public void encode(String contents, int width, int height, String imgPath) {
try{
BufferedImage bi = process(contents,width, height);
bi = cutWhiteSpace(bi,"png");
bi = addLogo(bi);
File file = new File(imgPath);
if (!file.exists()) {
file.mkdirs();
}
ImageIO.write(bi,"png",file);
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 生成不带图片的二维码
* @param contents
* @param width
* @param height
* @param imgPath
*/
public void noPictureEncode(String contents, int width, int height, String imgPath) {
Hashtable<Object, Object> hints = new Hashtable<Object, Object>();
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
hints.put(EncodeHintType.CHARACTER_SET, "GBK");
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,BarcodeFormat.QR_CODE, width, height, hints);
File file = new File(imgPath);
if (!file.exists()) {
file.mkdirs();
}
MatrixToImageWriter.writeToFile(bitMatrix, "png", file);
} catch (Exception e) {
e.printStackTrace();
}
}
public void encodeM(String contents, int width, int height, String imgPath) {
try{
BufferedImage bi = process_new(contents,width, height);
bi = addLogo(bi);
File file = new File(imgPath);
if (!file.exists()) {
file.mkdirs();
}
ImageIO.write(bi,"png",file);
}catch(Exception e){
e.printStackTrace();
}
}
public BufferedImage cutWhiteSpace(BufferedImage in,String type) throws IOException{
Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName(type);
ImageReader reader = it.next();
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(in, type, os);
InputStream is = new ByteArrayInputStream(os.toByteArray());
ImageInputStream iis = ImageIO.createImageInputStream(is);
reader.setInput(iis, false);
ImageReadParam param = reader.getDefaultReadParam();
Rectangle rect = new Rectangle(20, 20, 110,110);
param.setSourceRegion(rect);
BufferedImage bi = reader.read(0,param);
return bi;
}
public BufferedImage cutWhiteSpace_new(BufferedImage in,String type,int height) throws IOException{
Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName(type);
ImageReader reader = it.next();
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(in, type, os);
InputStream is = new ByteArrayInputStream(os.toByteArray());
ImageInputStream iis = ImageIO.createImageInputStream(is);
reader.setInput(iis, false);
ImageReadParam param = reader.getDefaultReadParam();
Rectangle rect = new Rectangle(height-5, height-5, 150-2*height+9,150-2*height+9);
param.setSourceRegion(rect);
BufferedImage bi = reader.read(0,param);
return bi;
}
public BufferedImage addLogo(BufferedImage qrcode) throws IOException{
// String path = servletContext.getRealPath("/");
// BufferedImage logo=ImageIO.read(new File(path+"manage/act_add/22.png"));
BufferedImage logo=ImageIO.read(new File("E:\\test\\11.png"));
int width = logo.getWidth();
int height = logo.getHeight();
int x=(qrcode.getWidth()-logo.getWidth())/2;
int y=(qrcode.getHeight()-logo.getHeight())/2;
int[] imageArray = new int[width * height];
imageArray = logo.getRGB(0, 0, width, height, imageArray,0, width);
qrcode.setRGB(x, y, width, height, imageArray, 0, width);
return qrcode;
}
// public void setServletContext(ServletContext arg0) {
// servletContext = arg0;
// }
}
分享到:
相关推荐
在IT行业中,条形码和二维码是数据交换与识别的重要工具,广泛应用于商品管理、物流追踪、信息存储等领域。Google的ZXing(Zebra Crossing)是一个开源项目,它提供了跨平台的条形码和二维码生成及扫描功能。下面将...
二维码小工具 - VBA_二维码vba_二维码_二维码生成_VBa_VBA二维码是一个使用VBA(Visual Basic for Applications)编程实现的Excel宏工具,它允许用户在Excel环境中生成二维码。VBA是Microsoft Office套件中内置的一...
在本主题中,我们主要关注如何利用LabVIEW来生成二维码。二维码(Quick Response Code)是一种二维条码,能存储大量数据,如网址、文本、联系信息等,且读取速度快,应用广泛。 生成二维码在LabVIEW中通常涉及到...
在Oracle E-Business Suite (EBS) 中实现二维码打印功能是一项技术性的工作,涉及到报表开发、数据集成以及打印机设置等多个方面。以下是对这个主题的详细解释: 1. **Oracle E-Business Suite(EBS)**:Oracle ...
在网页上显示二维码是一项常见的需求,特别是在嵌入式系统中,它可以方便地将链接、文本信息等转换为可扫描的图像。本教程将详细介绍如何利用HTML和JavaScript来实现这一功能。 首先,理解二维码(Quick Response ...
在本压缩包中,我们关注的是如何在PB环境中生成和显示二维码。二维码(Quick Response Code)是一种二维条码,可以存储大量信息,如网址、文本、联系人信息等,并能被智能手机快速读取。 首先,`MakeQRBarcode.dll`...
二维码是一种快速、便捷的信息交换方式,广泛应用于商品营销、支付交易、签到管理、社交推广、文档处理、物流追踪、链接分享、出行交通、应用下载和疫情防控等众多领域,以提供便利、追踪、管理和传递信息,并为用户...
现在网上很多应用都是用二维码来分享网址或者其它的信息。尤其在移动领域,二维码更是有很大的应用场景。因为项目的需要,需要在网站中增加一个生成二维码分析网址的功能,在谷歌大幅度抽筋的情况下无奈使用百度。...
在标题提到的“FastReport完美支持中文二维码”中,我们主要关注的是FastReport对中文字符在二维码生成中的优化。 在此之前,尽管FastReport已经支持二维码生成,但对于中文字符的支持可能存在一些问题,可能显示不...
Java 实现生成二维码和解析二维码 URL 操作示例 Java 是一种广泛使用的编程语言,具有强大的功能和灵活性。在实际应用中,生成二维码和解析二维码 URL 是非常常见的操作。本文将详细介绍 Java 实现生成二维码和解析...
二维码参数指标,22种二维码介绍 二维码是一种常用的自动识别技术,广泛应用于物流、零售、医疗等行业。二维码的参数指标是衡量二维码质量和可读性的重要指标,本文将详细介绍二维码参数指标和22种二维码的介绍。 ...
在IT行业中,二维码(Quick Response Code,简称QR码)已经成为数据传输和信息交换的重要工具,尤其是在移动设备上。PowerBuilder是一款老牌的可视化编程环境,专用于开发企业级应用。将二维码功能集成到Power...
"二维码评级"是其中的一个关键功能,它能够评估二维码的质量并根据行业标准进行分级。 在VisionPro 9.0中,二维码评级是通过内置的VPP(VisionPro Programming)工具实现的。VPP是一个可视化编程环境,用户可以通过...
在VB6(VB 6.0,Visual Basic 6.0)编程环境中,生成二维码是一项常见的需求,尤其在数据交换、信息展示等领域。本项目"VB_QRCode_QRCodevb_QRCODE_VB生成二维码_二维码_vb6生成二维码_"提供了一种解决方案,它是一个...
斑马打印机,作为工业级条码和二维码打印的佼佼者,被广泛应用于物流、仓储、制造等行业。本文将深入探讨如何使用斑马打印机进行二维码的打印,以及相关的技术要点。 首先,我们要了解斑马打印机的基本操作。斑马...
二维码生成在信息技术领域中是一项常见的任务,特别是在移动设备和物联网应用中。C语言,作为一种基础且广泛应用的编程语言,虽然不如高级脚本语言如Python或Java那样方便地提供现成的库来处理图像和编码,但依然...
1.通过QRCode.jar包生成二维码,可设置二维码图片格式,二维码图片存放路径,二维码尺寸,二维码颜色 2.二维码扫描内容分为两种,1种为链接式,如:www.zdkc.com,通过链接展示访问的内容,1种为json数据展示,通过...
在本场景中,我们讨论的是如何使用LabVIEW 2013及其视觉模块(Vision Development Module, VDM)来实现一次识别16个二维码的功能。这个任务涉及到图像处理、模式识别和计算机视觉等技术。 首先,我们要明确的是,...
在本文中,我们将探讨如何利用STM32微控制器生成二维码,实现数据的编码和解码,以便于信息的快速传递和读取。 首先,我们要了解二维码(Quick Response Code)的基本原理。二维码是一种二维条形码,能存储比传统...
在IT行业中,二维码识别是一项广泛应用于移动支付、信息交换、广告推广等领域的技术。本项目以"Halcon二维码_C#_二维码识别_halcon_"为主题,旨在介绍如何使用Halcon这一强大的机器视觉库,结合C#编程语言,实现对...