【防失忆笔记】记录一些IO流操作[二维码相关]

springboot读取resouce资源文件

InputStream logoInput = Thread.currentThread().getContextClassLoader().getResourceAsStream("logo.jpg");

将InputStream转换为image或者BufferedImage

BufferedImage image = ImageIO.read(inputStream);

将Base64码转换为inputStream再转换为image

java自带工具实现
Base64.Decoder decoder = Base64.getDecoder();
byte[] decode = decoder.decode(qrLogo);
ByteArrayInputStream inputStream = new ByteArrayInputStream(decode);
BufferedImage image = ImageIO.read(inputStream);
hutool工具实现
byte[] imageByte = Base64.decode(qrLogo);
ByteArrayInputStream inputStream = new ByteArrayInputStream(imageByte);
BufferedImage image = ImageIO.read(inputStream);
流程:base64->byte->inputStream->image

注意
ImageIO.read读取的byte不可以是带有data:image/jpg;base64,描述前缀的base64转为的byte,
一般通过Qr工具生成的二维码都是data:image/jpg;base64,开头的,所以我们需要把得到的base64删除
示例

@GetMapping("/qr")
public void get() throws IOException {
    // 读取二维码文件
    InputStream logoInput = Thread.currentThread().getContextClassLoader().getResourceAsStream("logo.jpg");
    // 转换为base64码
    String logoBase64 = Base64.encode(logoInput);
    // 配置hutool二维码工具
    QrConfig qrConfig = new QrConfig();
    qrConfig.setBackColor(new Color(248, 248, 248, 1));
    qrConfig.setForeColor(Color.BLACK);
    qrConfig.setWidth(166);
    qrConfig.setHeight(166);
    qrConfig.setMargin(1);
    qrConfig.setRatio(4);
    // 获取响应输出流
    ServletOutputStream outputStream = rsp.getOutputStream();
    // 内容
    String content = UUID.randomUUID().toString();
    // 传入内容,二维码配置,logo文件格式,logo的base64码,“注意这里的base64也不可以带有data:image/jpg;base64,前缀”
    String image64 = QrCodeUtil.generateAsBase64(content, qrConfig, "jpg", logoBase64);
    // 将得到的二维码base64去除前缀解码字节码
    byte[] imageByte = Base64.decode(image64.split(",")[1]);
    // 将字节码转换为输入流
    ByteArrayInputStream imageInput = new ByteArrayInputStream(imageByte);
    // 从输入流读取图片
    BufferedImage image = ImageIO.read(imageInput);
    // 向输出流输出图片
    ImageIO.write(image, "jpg", outputStream);
}
总之:工具需要的参数以及转换成image的base64都不可以带有前缀,但是工具生成的图片base64却是带有描述前缀的

其他文件换成用流循环读取可以达到同样的效果
未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值