import com.swetake.util.Qrcode; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; /** * Created by Admin on 16-3-9. */ public class TestCode { public static void main(String[] args) { try { //创建一个qrcode句柄 Qrcode qrcodeHandler = new Qrcode(); //二维码图片的纠错等级L(7%),M(15%),Q(25%),H(30%); qrcodeHandler.setQrcodeErrorCorrect('M'); //编码格式二进制 qrcodeHandler.setQrcodeEncodeMode('B'); //版本,从1——21x21,2——25x25,每个版本增加4各模块,最高不能超过40 qrcodeHandler.setQrcodeVersion(7); String content = "测试二维码!!!"; byte[] contentByte = content.getBytes("gbk"); //获取二维数组 boolean[][] codeOut=qrcodeHandler.calQrcode(contentByte); System.out.println(codeOut.length+"----------"+codeOut[0].length); int width = 139, height = 139; BufferedImage bufImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D graphics2D = bufImg.createGraphics(); graphics2D.setBackground(Color.WHITE); graphics2D.clearRect(0,0,width,height); graphics2D.setColor(Color.BLACK); int pos=2; for (int i=0;i<codeOut.length;i++){ for (int j=0;j<codeOut.length;j++){ if (codeOut[i][j]){ graphics2D.fillRect(i*3+pos,j*3+pos,3,3); } } } //实例化一个Image对象 Image image=ImageIO.read(new File("e:/123/ic.png")); //画制到画板 graphics2D.drawImage(image,45,45,49,49,null); //释放资源 graphics2D.dispose(); //清空缓存 bufImg.flush(); //输出文件 File img=new File("e:/123/version.png"); ImageIO.write(bufImg,"PNG",img); //关闭流 } catch (Exception e) { e.printStackTrace(); } } }
注:* 依赖包Qrcode_swetake.jar* 来创建图像对象的,默认的情况下图片的大小是139*139,这个大小是适合QrcodeVersion为7的情况。 * 将图片的大小设置到300*300就可以很好的支持QrcodeVersion为20的情况,并且可以正常的解码。 * QrcodeVersion的范围值是【0-40】, * 0的含义是表示压缩的信息量将会根据实际传入值确定, * 只有最高上限的控制,而且图片的大小将会根据信息量自动缩放。 * 1-40的范围值,则有固定的信息量上限,而且图片的大小会固定在一个大小上, * 不会根据信息量的多少而变化。图片的大小和QrcodeVersion的换算关系为(0除外): * 图片大小 = 67 + 12 * (QrcodeVersion值 - 1)。* 生成的二维码图片的大小是会根据所压缩的信息内容而变化的, * 网上提供的例子是通过new BufferedImage(139, 139, BufferedImage.TYPE_INT_RGB);
带图片二维码生成
最新推荐文章于 2022-06-13 09:44:59 发布