前言:
前言:
最近在做的项目由windows系统迁移到麒麟系统上,在麒麟系统上变色的图片是预览不出来的,而windows上确实可以的。所以就在网上找了一下解决方案并将解决方案记录一下。
问题:1、图片需要用Base64编码处理,这里在写入的时候直接定死了后缀名
2、jpg和jpeg格式的图片需要重画
解决:
/**
* 将本地图片文件转化为字节数组字符串,并对其进行Base64编码处理
*
* @param imageFile
* @return
*/
public static String encodeFileImageToBase64(File imageFile) {
//获取文件名
String fileName = imageFile.getName();
//截取后缀名
String formatName = fileName.substring(fileName.lastIndexOf(".") + 1);
ByteArrayOutputStream outputStream = null;
try {
BufferedImage bufferedImage = ImageIO.read(imageFile);
outputStream = new ByteArrayOutputStream();
//如果是jpg或者是jpeg,需要重画一下,否则会变色
if (formatName.equalsIgnoreCase("jpg") || formatName.equalsIgnoreCase("jpeg")) { //重画一下,要么会变色
BufferedImage tag;
tag = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_INT_BGR);
Graphics g = tag.getGraphics();
g.drawImage(bufferedImage, 0, 0, null); // 绘制缩小后的图
g.dispose();
bufferedImage = tag;
}
//将formatName 后缀名传入
ImageIO.write(bufferedImage, formatName, outputStream);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
return Base64.getEncoder().encodeToString(outputStream.toByteArray());
}