Mat先转文件再转Base64
private static String ImageToBase64(String imgPath) {
byte[] data = null;
// 读取图片字节数组
try {
InputStream in = new FileInputStream(imgPath);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
// 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
String base64Ret = encoder.encode(Objects.requireNonNull(data));
// 返回Base64编码过的字节数组字符串
System.out.println("本地图片转换Base64:" + ret);
return base64Ret;
}
private static String MatToBase64(Mat capImg){
Imgcodecs.imwrite(tmpFilePath + "tmp.jpg", capImg);
String base64 = ImageToBase64(tmpFilePath + "tmp.jpg");
}
Mat直接转Base64
private String MatToBase64(Mat capImg){
String jpg_base64 = null;
Imgcodecs.imwrite(tmpFilePath + "tmp.jpg", capImg);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(mat2BI(capImg), "jpg", baos);
byte[] bytes = baos.toByteArray();
BASE64Encoder encoder = new BASE64Encoder();
jpg_base64 = encoder.encodeBuffer(Objects.requireNonNull(bytes));
System.out.println("MAT转换Base64:" + jpg_base64);
return jpg_base64;
}
private BufferedImage mat2BI(Mat mat) {
int dataSize = mat.cols() * mat.rows() * (int) mat.elemSize();
byte[] data = new byte[dataSize];
mat.get(0, 0, data);
int type = mat.channels() == 1 ? BufferedImage.TYPE_BYTE_GRAY :
BufferedImage.TYPE_3BYTE_BGR;
if (type == BufferedImage.TYPE_3BYTE_BGR) {
for (int i = 0; i < dataSize; i += 3) {
byte blue = data[i + 0];
data[i + 0] = data[i + 2];
data[i + 2] = blue;
}
}
BufferedImage image = new BufferedImage(mat.cols(), mat.rows(), type);
image.getRaster().setDataElements(0, 0, mat.cols(), mat.rows(), data);
return image;
}