【发布时间】:2015-11-10 10:02:16
【问题描述】:
我有一个原始传真文件(G3/T.4 格式),需要通过 Java 以编程方式将其转换为多页 TIFF。到目前为止,JAI 对我来说还没有成功,即使我认为它应该有效。 sFaxTools 的工具已成功将我的原始传真文件转换为 TIFF(Batch Fax2Tif 或 Faxsee),但我需要通过 Java 以编程方式执行此操作。我认为应该有可能使用 java 高级成像,请查看下面的代码片段:
private void writeTiff(byte[] buffer, OutputStream outStream) {
try {
//reading image from given buffer
RenderedImage rendImage = null;
TIFFDecodeParam decodeParams = new TIFFDecodeParam();
ByteArrayInputStream stream = new ByteArrayInputStream(buffer);
ImageDecoder decoder = ImageCodec.createImageDecoder("tiff", stream, decodeParams);
TIFFEncodeParam encodeParams = new TIFFEncodeParam();
int numPages = decoder.getNumPages();
for (int i = 0; i < numPages; i++) {
rendImage = decoder.decodeAsRenderedImage(i);
ImageEncoder encoder = ImageCodec.createImageEncoder("TIFF", outStream, encodeParams);
encoder.encode(rendImage);
}
} catch (Exception e) {
e.printStackTrace();
} catch (Error err) {
err.printStackTrace();
}
}
问题是,阅读部分尤其 ImageDecoder 解码器 = ImageCodec.createImageDecoder("tiff", stream, decodeParams); 应该由一些 ImageDecoder 实现替换,该实现在内部使用 FaxDecoder 来解码 g3 原始传真文件。 jai 包中有一个受保护的类 TIFFFaxDecoder,是否有可能以及如何将其用于我的目的?任何的想法? 谢谢
【问题讨论】:
-
如果您在 Java 之外找到了适合您的工具,您可以使用
Runtime.getRuntime().exec(command)通过 Java 执行该工具。或者,Java 在 JAI 图像 I/O 工具中支持 TIFF,这与 JAI 如此不同以至于您可能没有找到它:stackoverflow.com/questions/7502181/… -
或者,查看有关 TIFF 和 JAI 入门的 SO 问题:stackoverflow.com/questions/30320434/write-a-tiff-with-jai
-
是否有关于“原始 G3 传真文件”在某处的规范?如果它与 G3 (T.4) 压缩 TIFF 的图像数据部分相同,则应该可以(并且非常容易)将数据包装在 TIFF 容器中。
-
只是为了证明这一点,我下载了我能找到的唯一sample file,编写了一个 TIFF 容器(使用 TwelveMonkeys ImageIO),其中包含来自TIFF Class F spec 的必填字段,然后附加了原始 G3 数据.该文件现在打开并显示为有效的 TIFF。见the following Gist。我不保证它适用于除该示例文件之外的任何东西。 ;-)
-
对不起,但我要求基于已使用框架的解决方案,我再次修改了我的问题。我不明白,如果你仍然抱怨它。如今的软件开发总是意味着尝试使用现有的(开源)框架,如果我不允许在我的帖子中提及它们或询问它是否支持我的要求,那么我认为这个论坛已经过时了。问候