用java生成二维码

部门刚刚接了一个项目需要,其中有一个功能点是需要扫描二维码进行收费,对于还没接触过二维码的我来说,我还是赶紧百度自学一下,整理网上资料后就有了这篇文章。生成二维码需要使用QRCode.jar包,网上可下载。

Action类:

<span style="font-size:18px;">package com.lmc.action;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.swetake.util.Qrcode;

@Controller
@Scope("prototype")
public class EncoderAction extends BaseAction{

	
	private static final long serialVersionUID = 1L;  
    private InputStream inputStream;  
 
      
    public String encoder() {  
        byte[] image = new byte[1000];  
        try {  
            image = createImage();  
        } catch (Exception e) {
            e.printStackTrace();  
        }  
        this.inputStream = new ByteArrayInputStream(image);  
        return "stream";  
    }  
  
    public byte[] createImage() throws UnsupportedEncodingException{  
        Qrcode qrcode = new Qrcode();    
        qrcode.setQrcodeErrorCorrect('M');    
        qrcode.setQrcodeEncodeMode('B');    
        qrcode.setQrcodeVersion(7);    
        //content为需要生成的字符串,可通过请求传入参数  
        String content= "https://www.baidu.com";  //存储信息到二维码中,如果是网址扫描后即可跳转到该地址,如果是文字则扫描获取该信息
        byte[] bstr = content.getBytes("UTF-8");  
        BufferedImage bi = new BufferedImage(139, 139,BufferedImage.TYPE_INT_RGB);    
        Graphics2D g = bi.createGraphics();    
        g.setBackground(Color.WHITE);   //背景颜色    
        g.clearRect(0, 0, 139, 139);    
        g.setColor(Color.BLACK);    //条码颜色    
        if (bstr.length > 0 && bstr.length < 123) {  
        	
            boolean[][] b = qrcode.calQrcode(bstr); //   
            for (int i = 0; i < b.length; i++) {    
                for (int j = 0; j < b.length; j++) {    
                    if (b[j][i]) {    
                        g.fillRect(j * 3 + 2, i * 3 + 2, 3, 3);    
                    }    
                }    
            }    
        }    
        ByteArrayOutputStream os = new ByteArrayOutputStream();  
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);  
        try {  
            encoder.encode(bi);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return os.toByteArray();  
    }  
  
    public InputStream getInputStream() {  
        return inputStream;  
    }  
    public void setInputStream(InputStream inputStream) {  
        this.inputStream = inputStream;  
    }  
	
	
}</span>
struts.xml配置:

<span style="font-size:18px;"><result name="stream" type="stream">  
       <param name="inputName">inputStream</param>  
       <param name="contentType">image</param>  
</result></span>
最后一步就是,在地址栏中输入访问该Action的encoder()方法就行了,或者是在jsp中添加<img src="你的URL" />






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值