`

二维码

    博客分类:
  • java
 
阅读更多
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;			
//		}
}

分享到:
评论

相关推荐

    条形码、二维码扫描、生成Demo 完整源码

    在IT行业中,条形码和二维码是数据交换与识别的重要工具,广泛应用于商品管理、物流追踪、信息存储等领域。Google的ZXing(Zebra Crossing)是一个开源项目,它提供了跨平台的条形码和二维码生成及扫描功能。下面将...

    二维码小工具 -VBA_二维码vba_二维码_二维码生成_VBa_VBA二维码_

    二维码小工具 - VBA_二维码vba_二维码_二维码生成_VBa_VBA二维码是一个使用VBA(Visual Basic for Applications)编程实现的Excel宏工具,它允许用户在Excel环境中生成二维码。VBA是Microsoft Office套件中内置的一...

    生成二维码_labview二维码_labviewqrcode_二维码_

    在本主题中,我们主要关注如何利用LabVIEW来生成二维码。二维码(Quick Response Code)是一种二维条码,能存储大量数据,如网址、文本、联系信息等,且读取速度快,应用广泛。 生成二维码在LabVIEW中通常涉及到...

    EBS二维码打印,oracle 二维码打印

    在Oracle E-Business Suite (EBS) 中实现二维码打印功能是一项技术性的工作,涉及到报表开发、数据集成以及打印机设置等多个方面。以下是对这个主题的详细解释: 1. **Oracle E-Business Suite(EBS)**:Oracle ...

    HTML+JS 显示二维码_html_二维码_显示二维码_

    在网页上显示二维码是一项常见的需求,特别是在嵌入式系统中,它可以方便地将链接、文本信息等转换为可扫描的图像。本教程将详细介绍如何利用HTML和JavaScript来实现这一功能。 首先,理解二维码(Quick Response ...

    pb如何生成二维码.rar_PB 二维码_PB显示二维码_directlyzpo_joymog_pb二维码开发

    在本压缩包中,我们关注的是如何在PB环境中生成和显示二维码。二维码(Quick Response Code)是一种二维条码,可以存储大量信息,如网址、文本、联系人信息等,并能被智能手机快速读取。 首先,`MakeQRBarcode.dll`...

    Java 生成二维码代码

    二维码是一种快速、便捷的信息交换方式,广泛应用于商品营销、支付交易、签到管理、社交推广、文档处理、物流追踪、链接分享、出行交通、应用下载和疫情防控等众多领域,以提供便利、追踪、管理和传递信息,并为用户...

    QRCode二维码生成组件(珍藏版)

    现在网上很多应用都是用二维码来分享网址或者其它的信息。尤其在移动领域,二维码更是有很大的应用场景。因为项目的需要,需要在网站中增加一个生成二维码分析网址的功能,在谷歌大幅度抽筋的情况下无奈使用百度。...

    FastReport完美支持中文二维码

    在标题提到的“FastReport完美支持中文二维码”中,我们主要关注的是FastReport对中文字符在二维码生成中的优化。 在此之前,尽管FastReport已经支持二维码生成,但对于中文字符的支持可能存在一些问题,可能显示不...

    Java实现的生成二维码和解析二维码URL操作示例

    Java 实现生成二维码和解析二维码 URL 操作示例 Java 是一种广泛使用的编程语言,具有强大的功能和灵活性。在实际应用中,生成二维码和解析二维码 URL 是非常常见的操作。本文将详细介绍 Java 实现生成二维码和解析...

    二维码参数指标,22种二维码介绍

    二维码参数指标,22种二维码介绍 二维码是一种常用的自动识别技术,广泛应用于物流、零售、医疗等行业。二维码的参数指标是衡量二维码质量和可读性的重要指标,本文将详细介绍二维码参数指标和22种二维码的介绍。 ...

    PB生成二维码(ocx控件)_二维码_

    在IT行业中,二维码(Quick Response Code,简称QR码)已经成为数据传输和信息交换的重要工具,尤其是在移动设备上。PowerBuilder是一款老牌的可视化编程环境,专用于开发企业级应用。将二维码功能集成到Power...

    visionpro9.0二维码评级vpp

    "二维码评级"是其中的一个关键功能,它能够评估二维码的质量并根据行业标准进行分级。 在VisionPro 9.0中,二维码评级是通过内置的VPP(VisionPro Programming)工具实现的。VPP是一个可视化编程环境,用户可以通过...

    VB_QRCode_QRCodevb_QRCODE_VB生成二维码_二维码_vb6生成二维码_

    在VB6(VB 6.0,Visual Basic 6.0)编程环境中,生成二维码是一项常见的需求,尤其在数据交换、信息展示等领域。本项目"VB_QRCode_QRCodevb_QRCODE_VB生成二维码_二维码_vb6生成二维码_"提供了一种解决方案,它是一个...

    斑马打印机二维码打印斑马打印机二维码打印

    斑马打印机,作为工业级条码和二维码打印的佼佼者,被广泛应用于物流、仓储、制造等行业。本文将深入探讨如何使用斑马打印机进行二维码的打印,以及相关的技术要点。 首先,我们要了解斑马打印机的基本操作。斑马...

    二维码生成-C语言版本

    二维码生成在信息技术领域中是一项常见的任务,特别是在移动设备和物联网应用中。C语言,作为一种基础且广泛应用的编程语言,虽然不如高级脚本语言如Python或Java那样方便地提供现成的库来处理图像和编码,但依然...

    JAVA 生成二维码并设置失效机制

    1.通过QRCode.jar包生成二维码,可设置二维码图片格式,二维码图片存放路径,二维码尺寸,二维码颜色 2.二维码扫描内容分为两种,1种为链接式,如:www.zdkc.com,通过链接展示访问的内容,1种为json数据展示,通过...

    labview一次识别16个二维码

    在本场景中,我们讨论的是如何使用LabVIEW 2013及其视觉模块(Vision Development Module, VDM)来实现一次识别16个二维码的功能。这个任务涉及到图像处理、模式识别和计算机视觉等技术。 首先,我们要明确的是,...

    利用STM32生成二维码,实现二维码的转换

    在本文中,我们将探讨如何利用STM32微控制器生成二维码,实现数据的编码和解码,以便于信息的快速传递和读取。 首先,我们要了解二维码(Quick Response Code)的基本原理。二维码是一种二维条形码,能存储比传统...

    Halcon二维码_C#_二维码识别_halcon_

    在IT行业中,二维码识别是一项广泛应用于移动支付、信息交换、广告推广等领域的技术。本项目以"Halcon二维码_C#_二维码识别_halcon_"为主题,旨在介绍如何使用Halcon这一强大的机器视觉库,结合C#编程语言,实现对...

Global site tag (gtag.js) - Google Analytics