Java:如何知道 TIFF 图像是否为 Group4?

标签 java image tiff

是否可以使用 JAVA 程序知道 TIFF 图像是否属于 Group4?

谢谢。

最佳答案

根据Oracle Jai Docs您可以使用 getCompression 方法并检查您的压缩是否等于 COMPRESSION_GROUP4 (int)。

或者您可以尝试使用 RenderedOp 和 TIFFDirectory 字段:

RenderedOp tiffFile= JAI.create("fileload","C:/test/20060829105323B10506002500200000000011.tiff");

int comp = getCompression(tiffFile);

if(comp == COMPRESSION_GROUP4)
System.out.println("Compression is : GROUP4");

对于 getCompression 自定义方法:

private static int getCompression(RenderedOp op) throws Exception {
int TAG_COMPRESSION = 259;
TIFFDirectory dir = (TIFFDirectory)op.getProperty("tiff_directory");
if(dir.isTagPresent(TAG_COMPRESSION)) {
TIFFField compField = dir.getField(TAG_COMPRESSION);
return compField.getAsInt(0);
}
return 0;
}
<小时/>

更新:要使用 SeekableStream,您需要一个 ImageReader 来避免加载异常。

Iterator readersIterator = ImageIO.getImageReadersByFormatName("tif");
ImageReader imageReader = (ImageReader)readersIterator.next();
ImageInputStream imageInputStream;
try {
imageInputStream = new FileImageInputStream(new File("C:/test/20060829105323B10506002500200000000011.tiff"));
imageReader.setInput(imageInputStream,false, true);

/* Take a input from a file */
FileSeekableStream fileSeekableStream;
fileSeekableStream = new FileSeekableStream(inputTifImagePath);

/* create ImageDecoder to count your pages from multi-page tiff */
ImageDecoder iDecoder = ImageCodec.createImageDecoder("tiff", fileSeekableStream, null);

/* count the number of pages inside the multi-page tiff */
int pageCount = iDecoder.getNumPages();

/* use first for loop to get pages one by one */
for(int page = 0; page < pageCount; page++){
/* get image metadata for each page */
IIOMetadata imageMetadata = imageReader.getImageMetadata(page);

/*
 * The root of all the tags for this image is the IFD (Image File Directory).
 * Get the IFD from where we can get all the tags for the image.
 */
TIFFDirectory ifd = TIFFDirectory.createFromMetadata(imageMetadata);

/* Create a Array of TIFFField*/
TIFFField[] allTiffFields = ifd.getTIFFFields();

/* use second for loop to get all field data */
for (int i = 0; i < allTiffFields.length; i++) {
TIFFField tiffField = allTiffFields[i];

/* name of property */
String nameOfField = tiffField.getTag().getName();

/* Type of property (optional) */
String typeOfField = TIFFField.getTypeName(tiffField.getType());                                 

/* Tag no. of the property (optional) */
int numberOfField = tiffField.getTagNumber(); }// we are looking for 259, jump optional step out of loop


TIFFField compField = ifd.getField(259);

/* Value of Property*/
int valueOfField = compField.getAsInt(0);

请告诉我它是否有效,以便我更新我的答案。

关于Java:如何知道 TIFF 图像是否为 Group4?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16605703/

相关文章:

java - 通过按钮更改数组中的 TextView 内容

c# - 使用 Bitmap.Save() 保存 tiff 文件会创建一个十倍大小的文件?

c# - 使用 Libtiff.Net 读取 32 位灰度 Tiff

Javamail 发送带附件的邮件可以在 Windows 上运行,但不能在 Linux 上运行

java - 调用方法时从数组返回一个值

java - 将具有相同逻辑的图像添加到游戏中的不同位置?

Android 将图像路径存储到 SQLite 数据库中

c++ - 访问 TIFF 图像

java - 全屏模式下的 JInternalFrame

jquery - 预加载图像并在加载时显示微调器