问题描述
使用海康的SDK长传JPG格式的图片到人脸库,总是上传不成功,SDK:hCNetSDK.NET_DVR_GetUploadState的返回值是19。相同的照片(用电脑能正常打开并查看)用海康自带的网页后台上传,提示:图片格式错误
问题解决
因为JPG也有编码问题,怀疑是某种编码的JPG海康设备并不支持。所以再使用Java通过BufferedImage再转一次就可以了。
工具方法代码如下:
public static byte[] bufferedImageToBytes(BufferedImage image) throws Exception {
// 得到图宽
int newWidth = image.getWidth();
// 得到图长
int newHeight = image.getHeight();
BufferedImage newBI = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
Graphics g = newBI.getGraphics();
g.drawImage(image.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
g.dispose();
ByteArrayOutputStream tmp = new ByteArrayOutputStream();
ImageIO.write(newBI, "jpg", tmp);
tmp.close();
return tmp.toByteArray();
}
使用这个工具方法,将图片文件转成bytes,再传给海康的SDK即可:
// File file = new File(...); byte[] bytes = bufferedImageToBytes(ImageIO.read(file));
标准的Java也可能识别不了某些编码的图片格式,所以需要加入如下依赖:
<!--解决ImageIO.read报错:unsupported image type问题-->
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-jpeg</artifactId>
<version>3.8.2</version>
</dependency>
关于这个的说明,详见:https://blog.terrynow.com/2022/08/16/image-io-read-raise-iioexcepiton-unsupported-image-type-solved/
文章评论