转载-Java生成二维码

Java生成二维码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sun123_123/article/details/78565768


 

https://blog.csdn.net/sun123_123/article/details/78565768

本文通过Java提供两种生成二维码以及解析二维码的方法

1.zxing

编码前准备:

  1. 下载zxing,下载后提取出core,javase中com文件夹下的文件自己打成jar包,供一会使用。zxing源码下载
  2. jdk版本:1.7及以上
import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

/**
 * 使用zxing生成二维码
 * 
 * @author suny
 */
public class CreateQRcode {

    public static void main(String[] args) {
        // 定义二维码图片参数
        int width = 300;
        int height = 300;
        String format = "jpg";
        String content = "www.baidu.com";

        // 定义二维码的参数
        HashMap<EncodeHintType, Object> map = new HashMap<EncodeHintType, Object>();
        // 定义二维码字符集
        map.put(EncodeHintType.CHARACTER_SET, "utf-8");
        // 纠错等级
        map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
        // 边距
        map.put(EncodeHintType.MARGIN, 2);

        /*
         * content:二维码内容 format:二维码类型
         */
        try {
            // 生成二维码
            BitMatrix bitmatrix = new MultiFormatWriter().encode(content,
                    BarcodeFormat.QR_CODE, width, height, map);
            Path file = new File("E:/img.jpg").toPath();
            MatrixToImageWriter.writeToPath(bitmatrix, format, file);

        } catch (Exception e) {
            e.printStackTrace();
        } 

    }
}


import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;
import javax.imageio.ImageIO;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;

/**
 * 使用zxing解析二维码
 * @author suny
 */
public class ReadQRcode {

    public static void main(String[] args) {
        try {
            MultiFormatReader multiFormatReader = new MultiFormatReader();
            File file = new File("E:/img.jpg");
            // 读取文件识别成为一张图片
            BufferedImage image = ImageIO.read(file);

            BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(
                    new BufferedImageLuminanceSource(image)));

            // 定义二维码的参数
            HashMap map = new HashMap();
            // 定义二维码字符集
            map.put(EncodeHintType.CHARACTER_SET, "utf-8");
            Result result = multiFormatReader.decode(binaryBitmap, map);
            System.out.println("解析结果:"+result.toString());
            System.out.println("二维码格式:"+result.getBarcodeFormat());
            System.out.println("二维码格式:"+result.getText());
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93

2.qrcode

编码前准备:
1. 下载qrcode生成包。qrcode生成包
2. 下载qrcode读取包。qrcode读取包
3. jdk版本:1.7及以上

/*
 *created by2017年11月17日
 */
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;

/**
 * 使用qrcode生成二维码
 * 
 * @author suny
 */
public class CreateQRcode {

    public static void main(String[] args) throws IOException {
        Qrcode x = new Qrcode();
        x.setQrcodeErrorCorrect('M');// 纠错等级
        x.setQrcodeEncodeMode('B');// M代表数字;A代表a-Z;B代表任意字符
        x.setQrcodeVersion(7);// 版本
        String qrData = "www.baidu.com";
        // 规定尺寸
        int width = 67 + 12 * (7 - 1);
        int height = 67 + 12 * (7 - 1);
        // 创建一个缓冲区图片
        BufferedImage bufferedImage = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);
        // Java提供的画图工具
        Graphics2D gs = bufferedImage.createGraphics();
        gs.setBackground(Color.WHITE);
        gs.setColor(Color.BLACK);
        // 清除画板内容
        gs.clearRect(0, 0, width, height);
        // 将文本转换成字节数
        byte[] d = qrData.getBytes();

        int pixoff = 2;// 偏移量
        // 进行填充
        if (d.length > 0 && d.length < 120) {

            boolean[][] s = x.calQrcode(d);

            for (int i = 0; i < s.length; i++) {
                for (int j = 0; j < s.length; j++) {
                    if (s[j][i]) {
                        gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
                    }
                }
            }
        }
        gs.dispose();
        bufferedImage.flush();

        ImageIO.write(bufferedImage, "jpg", new File("E:/aa.jpg"));
        System.out.println("生成成功");

    }

}


/*
 *created by2017年11月17日
 */
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import jp.sourceforge.qrcode.QRCodeDecoder;
/**
 * 使用qrcode解析二维码
 * @author sunyi
 */
public class ReadQRcode {

    public static void main(String[] args) throws IOException {
        File file = new File("E:/aa.jpg");
        // 读取文件识别成为一张图片
        BufferedImage image = ImageIO.read(file);

        QRCodeDecoder codeDecoder = new QRCodeDecoder();

        String rs = new String(codeDecoder.decode(new QRcodeImage_Test(image)));

        System.out.println(rs);
    }

}
/*
 *created by2017年11月17日
 */
import java.awt.image.BufferedImage;
import jp.sourceforge.qrcode.data.QRCodeImage;
/**
 * 
 * @author suny
 */
public class QRcodeImage_Test implements QRCodeImage {

    BufferedImage image;
    public QRcodeImage_Test(BufferedImage image) {
        this.image = image;
    }


    @Override
    public int getHeight() {

        return image.getHeight();
    }


    @Override
    public int getPixel(int arg0, int arg1) {
        return image.getRGB(arg0, arg1);
    }


    @Override
    public int getWidth() {
        return image.getWidth();
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值