海康人脸识别JavaSDK无法上传照片(返回值19,图片格式错误)的解决办法

2022-09-02 698点热度 0人点赞 0条评论

问题描述

使用海康的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/

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论