Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:如何知道TIFF图像是否为Group4?_Java_Image_Tiff - Fatal编程技术网

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

Java:如何知道TIFF图像是否为Group4?,java,image,tiff,Java,Image,Tiff,是否可以使用JAVA程序知道TIFF图像是否为Group4 谢谢。根据需要,您可以使用getCompression方法,检查您的压缩是否等于compression\u GROUP4(int) 或者,您可以尝试使用renderop和TIFFDirectory字段: RenderedOp tiffFile= JAI.create("fileload","C:/test/20060829105323B10506002500200000000011.tiff"); int comp = getComp

是否可以使用JAVA程序知道TIFF图像是否为Group4

谢谢。

根据需要,您可以使用
getCompression
方法,检查您的压缩是否等于
compression\u GROUP4
(int)

或者,您可以尝试使用renderop和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);
Iterator readersIterator=ImageIO.getImageReadersByFormatName(“tif”);
ImageReader=(ImageReader)readersIterator.next();
ImageInputStream ImageInputStream;
试一试{
imageInputStream=新文件imageInputStream(新文件(“C:/test/20060829105323B105060002500000000011.tiff”);
setInput(imageInputStream,false,true);
/*从文件中获取输入*/
FileSeekableStream FileSeekableStream;
fileSeekableStream=新的fileSeekableStream(inputIFImagePath);
/*创建ImageDecoder以从多页tiff计算页面数*/
ImageDecoder iDecoder=ImageCodec.createImageDecoder(“tiff”,fileSeekableStream,null);
/*计算多页tiff中的页数*/
int pageCount=iDecoder.getNumPages();
/*使用first for循环逐个获取页面*/
对于(int page=0;page

让我知道它是否有效,以便我可以更新我的答案。

谢谢。我的新代码如下

public static void TesterImage() throws Exception
{
    Iterator readersIterator = ImageIO.getImageReadersByFormatName("tif");
    ImageReader imageReader = (ImageReader)readersIterator.next();
    ImageInputStream imageInputStream;
    try {
        File file = new File("/Users/houssam/Pictures/statue.tiff");
        imageInputStream = new FileImageInputStream(file);
        imageReader.setInput(imageInputStream);

        FileSeekableStream fileSeekableStream;
        fileSeekableStream = new FileSeekableStream(file.getCanonicalPath());

        //ImageDecoder iDecoder = ImageCodec.createImageDecoder("tiff", fileSeekableStream, null);
        IIOMetadata imageMetadata = imageReader.getImageMetadata(0);
        TIFFDirectory ifd = TIFFDirectory.createFromMetadata(imageMetadata);
        if(getCompression(ifd)==COMPRESSION_GROUP4)
            System.out.println("Est de type Group4");
        else
            System.out.println("N'est pas de type Group4");
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}
static int TAG_COMPRESSION = 259;
public static int getCompression(TIFFDirectory ifd) throws Exception {

    TIFFField[] allTiffFields = ifd.getTIFFFields();

    for (int i = 0; i < allTiffFields.length; i++) {
        TIFFField tiffField = allTiffFields[i];

        String nameOfField = tiffField.getTag().getName();

        String typeOfField = TIFFField.getTypeName(tiffField.getType());

        System.out.println("Le nom est:"+nameOfField);
        System.out.println("Le type est:"+typeOfField);
        int numberOfField = tiffField.getTagNumber(); // we are looking for 259, jump optional step out of loop
        System.out.println(numberOfField + " Is The Number");
        if(numberOfField==TAG_COMPRESSION)
        {
            TIFFField compField = ifd.getTIFFField(TAG_COMPRESSION);
            int valueOfField = compField.getAsInt(0);
            return valueOfField;
        }
    }
    return 0;
}
public static void TesterImage()引发异常
{
迭代器readersIterator=ImageIO.getImageReadersByFormatName(“tif”);
ImageReader=(ImageReader)readersIterator.next();
ImageInputStream ImageInputStream;
试一试{
File File=新文件(“/Users/houssam/Pictures/status.tiff”);
imageInputStream=新文件imageInputStream(文件);
设置输入(imageInputStream);
FileSeekableStream FileSeekableStream;
fileSeekableStream=新的fileSeekableStream(file.getCanonicalPath());
//ImageDecoder iDecoder=ImageCodec.createImageDecoder(“tiff”,fileSeekableStream,null);
IIOMetadata imageMetadata=imageReader.getImageMetadata(0);
TIFFDirectory ifd=TIFFDirectory.createFromMetadata(imageMetadata);
if(getCompression(ifd)=压缩组4)
System.out.println(“Est de类型组4”);
其他的
System.out.println(“N'est pas de type Group4”);
}
捕获(例外e)
{
e、 printStackTrace();
}
}
静态int TAG_压缩=259;
公共静态int getCompression(TIFFDirectory ifd)引发异常{
tiffield[]alltiffields=ifd.gettiffields();
for(int i=0;i
谢谢您的回答。我已经尝试过了,但遇到了一个异常:线程“main”java.lang.IllegalArgumentException:FileLoad-参数值的类(java.io.File)不是参数“filename”的参数类(java.lang.String)的实例@HoussamLahrach代码已编辑。如果无法单独加载文件,请尝试使用getCanonicalPath()检索路径。非常感谢,该修改更正了错误,现在我有另一个例外:java.lang.Object无法转换为com.sun.media.jai.codec。TIFFDirectory@HoussamLahrach也许它更喜欢JAI.create(“tiff”,“C:/test/20060829105323B105060002500000000011.tiff”);用“tiff”代替“fileload”。试试看。再次感谢,但与第一个错误相同,tiff-参数值的类(java.lang.String)不是参数“stream”的参数类(com.sun.media.jai.codec.SeekableStream)的实例“。干得好!请将此代码添加到您的第一篇文章中,解释这是您的工作代码(基于我的建议构建,以便人们可以找到简单和麻烦的方法…)