base64和图片的互相转换(经过sonarlint代码扫描)
业务需要用到了图片和base64位字符串的互相转换,下面是java8的图片转换工具类
package com.xunmengren.commons.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.Base64Utils;
import java.io.*;
/**
* @ClassName Base64AndImg
* @Description base64和图片互相转换
* @Author xunmengren
* @Date 04/07/2019 16:05
* @Version 1.0
**/
@Slf4j
public class Base64AndImgUtil {
private Base64AndImgUtil() {
}
/**
* @param baseStr Base64图片字符串
* @param imgPath 图片绝对路径
* @return void
* @description base64字符串位转img
* @author xunmengren
* @createTime 04/07/2019 15:47
*/
public static void base64ToImg(String baseStr, String imgPath) {
//参数校验
if (StringUtils.isBlank(baseStr) || StringUtils.isBlank(imgPath)) {
return;
}
//前端转换会有 data:image/png;base64,
//去掉 data:image/png;base64,
int index = baseStr.indexOf(',');
if (index != -1) {
baseStr = baseStr.substring(baseStr.indexOf(',') + 1);
}
byte[] b = Base64Utils.decodeFromString(baseStr);
// 处理数据
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}
//写文件流
try (OutputStream out = new FileOutputStream(imgPath);) {
out.write(b);
out.flush();
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
/**
* @param imgPath 图片绝对路径
* @return void
* @description img转base64位字符串
* @author xunmengren
* @createTime 04/07/2019 15:47
*/
public static String imgToBase64(String imgPath) {
//图片路径校验
if (StringUtils.isBlank(imgPath)) {
return null;
}
try (InputStream inputStream = new FileInputStream(imgPath);) {
byte[] data = new byte[inputStream.available()];
if (inputStream.read(data) >= 0) {
//转换base64编码
return Base64Utils.encodeToString(data);
}
} catch (IOException e) {
log.error(e.getMessage(), e);
}
return null;
}
public static void main(String[] args) {
//需要转换base64位字符串的图片路径
String imgPath = "C:\\usr\\test.jpg";
//base64位字符串转换图片的路径
String imgOutPath = "C:\\usr\\test-S.jpg";
String base64Img = imgToBase64(imgPath);
log.info(base64Img);
base64ToImg(base64Img, imgOutPath);
}
}