我正在尝试创建一个Java程序,该程序将对多种格式的图像进行OCR。无法直接从文件读取图像,因为它们的字节将通过网络发送。

我目前能够使用ImageIO读取图像像素的原始字节。但是我想支持ImageMagick支持的所有格式,因此请使用JMagick读取图像,然后将原始字节提供给Tess4J。我不确定该如何处理。我发现此功能可以给我字节:

PixelPacket[] MagickImage.getColormap();


但是我将不得不编写一种特殊的方法来将获得的PixelPacket对象转换为连续的字节。我可以做到,但是也许有更好的方法可以做到这一点?例如,也许有些极端原始的文件格式(甚至比http://en.wikipedia.org/wiki/BMP_file_format#mediaviewer/File:BMPfileFormat.png更多)可以在这种方法中使用:

byte[] imageToBlob(ImageInfo imageInfo) ?


imageInfo对象将必须指向此原始格式,然后可以从bytes数组中剪切出像素信息。

这是正确的方法还是我应该使用更简单的方法(更快/更可靠)?

编辑

我发现我想到的格式称为PNM

最佳答案

我认为,如果使用JMagick,则正在使用dispatchImage方法。它将使您可以直接访问图像的原始像素。不需要文件格式。

有关示例,请参见我的MagickUtil class;如果愿意,请仅使用该类。

我还为JMagick支持的许多相同格式编写了纯Java ImageIO插件,可能有用。您将在我的GitHub repository中找到它们。

08-17 01:03