问题描述
使用海康的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/
文章评论