# 1、添加依赖
<!-- 图片缩略图 --> | |
<dependency> | |
<groupId>net.coobird</groupId> | |
<artifactId>thumbnailator</artifactId> | |
<version>0.4.8</version> | |
</dependency> |
# 2、base64 加密方法
//base64 加密 | |
/** | |
* 图片转 base64 加密 | |
* @param imgFile | |
* @return | |
*/ | |
protected static String imageToBase64Str(String imgFile) { | |
String strRet = ""; | |
InputStream inputStream = null; | |
byte[] data = null; | |
try { | |
inputStream = new FileInputStream(imgFile); | |
data = new byte[inputStream.available()]; | |
inputStream.read(data); | |
inputStream.close(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
// 加密 | |
org.apache.commons.codec.binary.Base64 encoder = new org.apache.commons.codec.binary.Base64(); | |
strRet = encoder.encodeAsString(data); | |
return strRet; | |
} |
# 3、base64 解密方法
/** | |
* @param imgStr base64 编码字符串 | |
* @param path 图片路径 - 具体到文件 | |
* @return | |
* @Description: 将 base64 编码字符串转换为图片 | |
* @Author: | |
* @CreateTime: | |
*/ | |
public static boolean generateImage(String imgStr, String path) { | |
if(imgStr == null){ | |
return false; | |
} | |
BASE64Decoder decoder = new BASE64Decoder(); | |
try{ | |
// 解密 | |
byte[] b = decoder.decodeBuffer(imgStr); | |
// 处理数据 | |
for (int i = 0;i<b.length;++i){ | |
if(b[i]<0){ | |
b[i]+=256; | |
} | |
} | |
OutputStream out = new FileOutputStream(path); | |
out.write(b); | |
out.flush(); | |
out.close(); | |
return true; | |
} catch (IOException e) { | |
e.printStackTrace(); | |
return false; | |
} | |
} |
# 4、将得到的 base64 码进行解密成图片,然后进行缩放,再进行加密
//TODO 缩小图片 200X200 | |
String basePath = Controller.class.getResource("/").getPath(); | |
basePath = basePath.substring(1, basePath.length()); | |
String reportPath = ""; | |
reportPath = basePath.replace("classes", "images"); // 找到 image 路径 | |
String srcPath = reportPath + "image.jpeg"; | |
generateImage(faceImage, srcPath); | |
String destPath = reportPath + "newImage.jpeg"; | |
try { | |
resizeImage(srcPath, destPath, 200, 200, false); | |
String newImage = imageToBase64Str(destPath);// 改变大小后的图片 base64 码 | |
LOGGER.debug(newImage); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} |
# 5、缩放图片的方法,可以指定长宽,也可以按比例
/** | |
* 重新生成图片宽、高 | |
* @param srcPath 图片路径 | |
* @param destPath 新生成的图片路径 | |
* @param newWigth 新的宽度 | |
* @param newHeight 新的高度 | |
* @param forceSize 是否强制使用指定宽、高,false: 会保持原图片宽高比例约束 | |
* @return | |
* @throws IOException | |
*/ | |
public static boolean resizeImage (String srcPath, String destPath, int newWigth, int newHeight, boolean forceSize) throws IOException { | |
if (forceSize) { | |
try { | |
Thumbnails.of(srcPath).forceSize(newWigth, newHeight).toFile(destPath); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} else { | |
Thumbnails.of(srcPath).width(newWigth).height(newHeight).toFile(destPath); | |
} | |
return true; | |
} |
注意:
- 进行 base64 解密的 base64 码要去掉头部
data:image/jpg;base64, |
- 输出到路径,在 web 项目中输出路径