我正在开发一个项目,该项目具有我需要提交图像的外部API,并且该API的要求是该图像是具有Group 4压缩的TIFF。我尝试了几种不同的方法将我的Bitmap转换为TIFF,包括在Android中使用JAI imageio,将libtiff移植到NDK并使用OpenCV。 JAI imageio通常建议在这里作为一种可能的解决方案,但我发现,即使我发现了一个独立版本的JAI imageio,我仍然对javax.imageio有一个未满足的依赖,因此无法构建我的应用程序。移植libtiff应该可行,并且我在我的代码中有一个分支,我已经开始这个过程,但由于需要时间,我宁愿选择其他解决方案。 OpenCV我也开始实现了,但是我决定安装一个辅助OpenCV Manager APK以便使用它是我的应用程序所不能接受的,除了这对解决一个简单的问题来说是一个重大的过度杀伤。
目前,我一直在使用此处https://github.com/paulasiimwe/Android-ImageMagick找到的ImageMagick的Android端口,这似乎是一种很有前途的方法。到目前为止,我已经在我的应用程序中进行了设置,并能够将图像输出到文件中以验证图像。我可以使用它转换为几种不同的图像格式,但是当我尝试转换为TIFF时,我收到一个SIGSEGV并且应用程序崩溃。
相关的代码段是:
MagickImage image = MagickBitmap.fromBitmap(sizedImage);
image.setMagick("TIFF");
image.setImageFormat("TIFF");
image.setDepth(1);
image.setCompression(CompressionType.Group4Compression);
ImageInfo info = new ImageInfo();
info.setMagick("TIFF");
info.setCompression(CompressionType.Group4Compression);
image.writeImage(info);
我尝试了对setMagick和setCompression的不同调用的各种排列,所有这些都会产生相同的结果。如果调用setMagick(" TIFF"),那么当它到达image.writeImage(info)时,应用程序将崩溃,并显示以下输出:
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 2283
有没有人在Android中使用ImageMagick转换为TIFF,或者是否有人知道在Android中转换为TIFF的干净方法已经过验证可以正常工作。我知道这一定是可能的,因为Play商店中有应用程序用于转换图像格式,包括转换为TIFF,包括发布此Android端口的Paul Asiimwe中的一个。
编辑#1:
通过使用以下代码,我可以获得在所有其他方面看起来都是正确的未压缩TIFF,但它不会将其压缩为第4组压缩。
MagickImage image = MagickBitmap.fromBitmap(sizedImage);
image.setDepth(1);
image.setNumberColors(2);
ImageInfo info = new ImageInfo(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+"/output.tiff");
image.setCompression(CompressionType.Group4Compression);
image.writeImage(info);
info.setColorspace(ColorspaceType.GRAYColorspace);
info.setMonochrome(1);
info.setCompression(CompressionType.Group4Compression);
image.writeImage(info);
byte[] blob = image.imageToBlob(info);
答案 0 :(得分:1)
在这种情况下,我认为您必须实施自己的手动tiff转换。
答案 1 :(得分:0)
您可以使用我的库。它可以将位图保存为tiff图像 https://github.com/Beyka/Android-TiffBitmapFactory