Module java.desktop

Class TIFFField

java.lang.Object
javax.imageio.plugins.tiff.TIFFField
所有已实现的接口:
Cloneable

public final class TIFFField extends Object implements Cloneable
代表TIFF 6.0图像文件目录中的字段的类。

TIFF图像文件目录(IFD)中的字段被定义为由相同数据类型的数值序列陪同的标记号。TIFF 6.0定义了12种数据类型;第13种类型IFD在TIFF规范补充1的TIFF技术说明1中定义。这些TIFF数据类型由Java常量引用,并在内部映射到Java语言数据类型和类型名称如下:

TIFF数据类型到Java数据类型的映射
TIFF数据类型 Java常量 Java数据类型 Java类型名称
BYTE TIFFTag.TIFF_BYTE byte "Byte"
ASCII TIFFTag.TIFF_ASCII String "Ascii"
SHORT TIFFTag.TIFF_SHORT char "Short"
LONG TIFFTag.TIFF_LONG long "Long"
RATIONAL TIFFTag.TIFF_RATIONAL long[2] {numerator, denominator} "Rational"
SBYTE TIFFTag.TIFF_SBYTE byte "SByte"
UNDEFINED TIFFTag.TIFF_UNDEFINED byte "Undefined"
SSHORT TIFFTag.TIFF_SSHORT short "SShort"
SLONG TIFFTag.TIFF_SLONG int "SLong"
SRATIONAL TIFFTag.TIFF_SRATIONAL int[2] {numerator, denominator} "SRational"
FLOAT TIFFTag.TIFF_FLOAT float "Float"
DOUBLE TIFFTag.TIFF_DOUBLE double "Double"
IFD TIFFTag.TIFF_IFD_POINTER long "IFDPointer"
自从:
9
参见:
  • Constructor Summary

    Constructors
    Constructor
    Description
    TIFFField(TIFFTag tag, int type, int count)
    使用createArrayForType()构造数据数组,并使用提供的参数和创建的数组调用TIFFField(TIFFTag,int,int,Object)
    TIFFField(TIFFTag tag, int type, int count, Object data)
    使用任意数据构造一个TIFFField
    TIFFField(TIFFTag tag, int type, long offset, TIFFDirectory dir)
    使用IFD偏移和内容构造一个TIFFField
    TIFFField(TIFFTag tag, long value)
    使用单个非负整数值构造一个TIFFField
  • Method Summary

    Modifier and Type
    Method
    Description
    clone()
    克隆字段及其中包含的所有信息。
    static Object
    createArrayForType(int dataType, int count)
    为指定的数据类型创建一个适当的数组。
    static TIFFField
    从TIFF本机图像元数据节点创建一个TIFFField
    byte[]
    将数据作为未解释的byte数组返回。
    char[]
    TIFFTag.TIFF_SHORT数据作为char数组(无符号16位整数)返回。
    double
    getAsDouble(int index)
    将任何格式的数据作为double返回。
    double[]
    TIFFTag.TIFF_DOUBLE数据作为double数组(64位浮点数值)返回。
    float
    getAsFloat(int index)
    将任何格式的数据作为float返回。
    float[]
    TIFFTag.TIFF_FLOAT数据作为float数组(32位浮点数值)返回。
    int
    getAsInt(int index)
    将任何格式的数据作为int返回。
    int[]
    TIFFTag.TIFF_SLONG数据作为int数组(有符号32位整数)返回。
    long
    getAsLong(int index)
    将任何格式的数据作为long返回。
    long[]
    TIFFTag.TIFF_LONGTIFF_IFD_POINTER数据作为long数组(有符号64位整数)返回。
    TIFFField作为一个名为"TIFFField""TIFFIFD"的节点返回,如TIFF本机图像元数据规范中所述。
    long[]
    getAsRational(int index)
    将一个TIFFTag.TIFF_RATIONAL数据项作为两个元素的int数组返回。
    long[][]
    TIFFTag.TIFF_RATIONAL数据作为long数组的2元素数组返回。
    short[]
    TIFFTag.TIFF_SSHORT数据作为short数组(有符号16位整数)返回。
    int[]
    getAsSRational(int index)
    将一个TIFFTag.TIFF_SRATIONAL数据项作为两个元素的int数组返回。
    int[][]
    TIFFTag.TIFF_SRATIONAL数据作为int数组的2元素数组返回。
    getAsString(int index)
    TIFFTag.TIFF_ASCII值作为String返回。
    int
    返回字段中存在的数据项数量。
    返回与字段关联的数据对象的引用。
    返回关联的TIFFDirectory(如果可用)。
    getTag()
    检索与此字段关联的标记。
    int
    检索范围在[0,65535]内的标记号。
    int
    返回字段中存储的数据类型。
    static int
    getTypeByName(String typeName)
    返回与提供的数据类型名称对应的数据类型常量。
    static String
    getTypeName(int dataType)
    返回提供的数据类型常量的名称。
    getValueAsString(int index)
    返回包含数据项的人类可读版本的String
    boolean
    返回字段是否具有TIFFDirectory
    boolean
    指示与字段关联的值是否为整数数据类型。

    Methods declared in class java.lang.Object

    equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • TIFFField

      public TIFFField(TIFFTag tag, int type, int count, Object data)
      使用任意数据构造一个TIFFFieldtype参数必须是tag.isDataTypeOK()返回true的值。 data参数必须是适合于TIFF字段类型的Java类型数组。

      请注意,TIFFField的值(数据)将始终是实际字段值,而不管该值所需的字节数。尽管TIFF IFD Entry对应的字段值可能实际上包含指向字段值的偏移量,而不是值本身(仅当值适合4字节时才会发生这种情况)。换句话说,字段的值将已经从TIFF流中读取。(在字段表示非基线IFD内容的情况下可能会有例外。在这种情况下,数据将是包含IFD偏移量的long[],并且由getDirectory()返回的TIFFDirectory将是其内容。)

      参数:
      tag - 与此字段关联的标签。
      type - 表示字段数据类型的TIFFTag.TIFF_*常量之一,如写入TIFF流。
      count - 数据值的数量。
      data - 字段的实际数据内容。
      抛出:
      NullPointerException - 如果tag == null
      IllegalArgumentException - 如果type不是TIFFTag.TIFF_*数据类型常量之一。
      IllegalArgumentException - 如果type是提供的TIFFTag的不可接受的数据类型。
      IllegalArgumentException - 如果count < 0
      IllegalArgumentException - 如果count < 1typeTIFF_RATIONALTIFF_SRATIONAL
      IllegalArgumentException - 如果count != 1typeTIFF_IFD_POINTER
      NullPointerException - 如果data == null
      IllegalArgumentException - 如果data是与指定类型不兼容的类的实例。
      IllegalArgumentException - 如果数据数组的大小不正确。
      IllegalArgumentException - 如果数据数组的类型为TIFF_LONGTIFF_RATIONALTIFF_IFD_POINTER,并且任何元素为负数或大于0xffffffff
    • TIFFField

      public TIFFField(TIFFTag tag, int type, int count)
      使用createArrayForType()构造数据数组,并使用提供的参数和创建的数组调用TIFFField(TIFFTag,int,int,Object)
      参数:
      tag - 与此字段关联的标签。
      type - 表示字段数据类型的TIFFTag.TIFF_*常量之一,如写入TIFF流。
      count - 数据值的数量。
      抛出:
      NullPointerException - 如果tag == null
      IllegalArgumentException - 如果type不是TIFFTag.TIFF_*数据类型常量之一。
      IllegalArgumentException - 如果type是提供的TIFFTag的不可接受的数据类型。
      IllegalArgumentException - 如果count < 0
      IllegalArgumentException - 如果count < 1typeTIFF_RATIONALTIFF_SRATIONAL
      IllegalArgumentException - 如果count != 1typeTIFF_IFD_POINTER
      参见:
    • TIFFField

      public TIFFField(TIFFTag tag, long value)
      使用单个非负整数值构造TIFFField。如果value[0,0xffff]范围内,则字段将具有类型TIFF_SHORT,如果value[0x10000,0xffffffff]范围内,则字段将具有类型TIFF_LONG。字段的数量将为1。
      参数:
      tag - 要与此字段关联的标签。
      value - 要与此字段关联的值。
      抛出:
      NullPointerException - 如果tag == null
      IllegalArgumentException - 如果value不在[0,0xffffffff]范围内。
      IllegalArgumentException - 如果value[0,0xffff]范围内且TIFF_SHORTTIFFTag的不可接受类型,或者如果value[0x10000,0xffffffff]范围内且TIFF_LONGTIFFTag的不可接受类型。
    • TIFFField

      public TIFFField(TIFFTag tag, int type, long offset, TIFFDirectory dir)
      使用IFD偏移和内容构造TIFFField。偏移将作为此字段的数据存储为long[] {offset}。目录将不会被克隆。字段的数量将为1。
      参数:
      tag - 与此字段关联的标签。
      type - TIFFTag.TIFF_LONGTIFFTag.TIFF_IFD_POINTER之一的常量。
      offset - IFD偏移量。
      dir - 目录。
      抛出:
      NullPointerException - 如果tag == null
      IllegalArgumentException - 如果type是提供的TIFFTag的不可接受的数据类型。
      IllegalArgumentException - 如果type既不是TIFFTag.TIFF_LONG也不是TIFFTag.TIFF_IFD_POINTER
      IllegalArgumentException - 如果offset <= 0
      NullPointerException - 如果dir == null
      参见:
  • Method Details

    • createFromMetadataNode

      public static TIFFField createFromMetadataNode(TIFFTagSet tagSet, Node node)
      从TIFF本机图像元数据节点创建TIFFField。如果节点的"number"属性的值在tagSet中找不到,则将创建一个新的名称为TIFFTag.UNKNOWN_TAG_NAMETIFFTag并分配给字段。
      参数:
      tagSet - 字段所属的TIFFTagSet
      node - 本机TIFF图像元数据TIFFField节点。
      返回:
      一个新的TIFFField
      抛出:
      IllegalArgumentException - 如果Node参数内容不符合TIFF本机图像元数据格式规范中定义的TIFFField元素结构,或者如果节点属性和数据的组合不符合TIFFField(TIFFTag,int,int,Object)构造函数规范。请注意,此类异常可能会设置原因。
    • getTag

      public TIFFTag getTag()
      检索与此字段关联的标签。
      返回:
      关联的TIFFTag
    • getTagNumber

      public int getTagNumber()
      检索范围在[0,65535]之间的标签号。
      返回:
      标签号。
    • getType

      public int getType()
      返回字段中存储的数据类型。对于TIFF 6.0流,该值将等于TIFFTag.TIFF_*常量之一。对于TIFF的未来修订版本,可能存在更高的值。
      返回:
      字段值的数据类型。
    • getTypeName

      public static String getTypeName(int dataType)
      返回所提供数据类型常量的名称。
      参数:
      dataType - 表示字段数据类型的TIFFTag.TIFF_*常量之一,如写入TIFF流。
      返回:
      与提供的类型常量对应的类型名称。
      抛出:
      IllegalArgumentException - 如果dataType不是TIFFTag.TIFF_*数据类型常量之一。
    • getTypeByName

      public static int getTypeByName(String typeName)
      返回与提供的数据类型名称对应的数据类型常量。如果名称未知,则返回-1
      参数:
      typeName - 类型名称。
      返回:
      TIFFTag.TIFF_*常量之一,如果名称未被识别,则返回-1
    • createArrayForType

      public static Object createArrayForType(int dataType, int count)
      创建适合指定数据类型的数组。
      参数:
      dataType - TIFFTag.TIFF_* 数据类型常量之一。
      count - 数组中值的数量。
      返回:
      适合指定数据类型的数组。
      抛出:
      IllegalArgumentException - 如果dataType不是TIFFTag.TIFF_*数据类型常量之一。
      IllegalArgumentException - 如果count < 0
      IllegalArgumentException - 如果count < 1typeTIFF_RATIONALTIFF_SRATIONAL
      IllegalArgumentException - 如果count != 1typeTIFF_IFD_POINTER
    • getAsNativeNode

      public Node getAsNativeNode()
      TIFFField作为节点返回,节点名称为"TIFFField""TIFFIFD",如TIFF本机图像元数据规范中所述。仅当hasDirectory()返回true且字段类型为TIFFTag.TIFF_LONGTIFFTag.TIFF_IFD_POINTER时,节点将命名为"TIFFIFD"
      返回:
      名为"TIFFField""TIFFIFD"Node
    • isIntegral

      public boolean isIntegral()
      指示字段关联值是否为整数数据类型。
      返回:
      字段类型是否为整数。
    • getCount

      public int getCount()
      返回字段中存在的数据项数。对于TIFFTag.TIFF_ASCII字段,返回值是String的数量,而不是文件表示中数据的总长度。
      返回:
      字段中存在的数据项数。
    • getData

      public Object getData()
      返回与字段关联的数据对象的引用。
      返回:
      字段的数据对象。
    • getAsBytes

      public byte[] getAsBytes()
      将数据作为byte的未解释数组返回。字段的类型必须是TIFFTag.TIFF_BYTETIFF_SBYTETIFF_UNDEFINED之一。

      对于TIFFTag.TIFF_BYTE格式的数据,应用程序在将数据提升为更长的整数类型时必须小心,以避免符号扩展。

      返回:
      数据作为未解释的字节数组。
      抛出:
      ClassCastException - 如果字段不是TIFF_BYTETIFF_SBYTETIFF_UNDEFINED类型。
    • getAsChars

      public char[] getAsChars()
      TIFFTag.TIFF_SHORT数据作为char数组(无符号16位整数)返回。
      返回:
      数据作为char数组。
      抛出:
      ClassCastException - 如果字段不是TIFF_SHORT类型。
    • getAsShorts

      public short[] getAsShorts()
      TIFFTag.TIFF_SSHORT数据作为short数组(有符号16位整数)返回。
      返回:
      数据作为short数组。
      抛出:
      ClassCastException - 如果字段不是TIFF_SSHORT类型。
    • getAsInts

      public int[] getAsInts()
      TIFFTag.TIFF_SLONG数据作为int数组(有符号32位整数)返回。
      返回:
      数据作为int数组。
      抛出:
      ClassCastException - 如果字段不是TIFF_SHORTTIFF_SSHORTTIFF_SLONG类型。
    • getAsLongs

      public long[] getAsLongs()
      TIFFTag.TIFF_LONGTIFF_IFD_POINTER数据作为long数组(有符号64位整数)返回。
      返回:
      数据作为long数组。
      抛出:
      ClassCastException - 如果字段不是TIFF_LONGTIFF_IFD_POINTER类型。
    • getAsFloats

      public float[] getAsFloats()
      TIFFTag.TIFF_FLOAT数据作为float数组(32位浮点值)返回。
      返回:
      数据作为float数组。
      抛出:
      ClassCastException - 如果字段不是TIFF_FLOAT类型。
    • getAsDoubles

      public double[] getAsDoubles()
      TIFFTag.TIFF_DOUBLE数据作为double数组(64位浮点值)返回。
      返回:
      数据作为double数组。
      抛出:
      ClassCastException - 如果字段不是TIFF_DOUBLE类型。
    • getAsSRationals

      public int[][] getAsSRationals()
      TIFFTag.TIFF_SRATIONAL数据作为int的2元素数组的数组返回。
      返回:
      数据作为有符号分数的数组。
      抛出:
      ClassCastException - 如果字段不是TIFF_SRATIONAL类型。
    • getAsRationals

      public long[][] getAsRationals()
      TIFFTag.TIFF_RATIONAL数据作为long的2元素数组的数组返回。
      返回:
      数据作为无符号分数的数组。
      抛出:
      ClassCastException - 如果字段不是TIFF_RATIONAL类型。
    • getAsInt

      public int getAsInt(int index)
      将数据以int的形式返回,可以是任何格式的数据。

      TIFFTag.TIFF_BYTE值被视为无符号的;即,不会发生符号扩展,返回值将在[0, 255]范围内。 TIFF_SBYTE数据将在[-128, 127]范围内返回。

      TIFF_UNDEFINED值被视为TIFF_BYTE

      TIFF_SLONGTIFF_LONGTIFF_FLOATTIFF_DOUBLETIFF_IFD_POINTER格式的数据将简单地转换为int,可能会出现截断。

      TIFF_SRATIONALTIFF_RATIONAL格式的数据将通过使用双精度算术将分子除以分母,然后转换为int来评估。可能会发生精度丢失和截断。

      TIFF_ASCII格式的数据将被解析为Double.parseDouble方法,结果转换为int

      参数:
      index - 数据的索引。
      返回:
      给定索引处的数据作为int
    • getAsLong

      public long getAsLong(int index)
      将数据以long的形式返回,可以是任何格式的数据。

      TIFFTag.TIFF_BYTETIFF_UNDEFINED数据被视为无符号的;即,不会发生符号扩展,返回值将在[0, 255]范围内。 TIFF_SBYTE数据将在[-128, 127]范围内返回。

      TIFF_FLOATTIFF_DOUBLE中的数据将简单地转换为long,可能会出现截断。

      TIFF_SRATIONALTIFF_RATIONAL格式的数据将通过使用双精度算术将分子除以分母,然后转换为long来评估。可能会发生精度丢失和截断。

      TIFF_ASCII格式的数据将被解析为Double.parseDouble方法,结果转换为long

      参数:
      index - 数据的索引。
      返回:
      给定索引处的数据作为long
    • getAsFloat

      public float getAsFloat(int index)
      将数据以float的形式返回,可以是任何格式的数据。

      TIFFTag.TIFF_BYTETIFF_UNDEFINED数据被视为无符号的;即,不会发生符号扩展,返回值将在[0, 255]范围内。 TIFF_SBYTE数据将在[-128, 127]范围内返回。

      TIFF_SLONGTIFF_LONGTIFF_DOUBLETIFF_IFD_POINTER格式的数据将简单地转换为float,可能会出现截断。

      TIFF_SRATIONALTIFF_RATIONAL格式的数据将通过使用双精度算术将分子除以分母,然后转换为float来评估。

      TIFF_ASCII格式的数据将被解析为Double.parseDouble方法,结果转换为float

      参数:
      index - 数据的索引。
      返回:
      给定索引处的数据作为float
    • getAsDouble

      public double getAsDouble(int index)
      将数据以double的形式返回,可以是任何格式的数据。

      TIFFTag.TIFF_BYTETIFF_UNDEFINED数据被视为无符号的;即,不会发生符号扩展,返回值将在[0, 255]范围内。 TIFF_SBYTE数据将在[-128, 127]范围内返回。

      TIFF_SRATIONALTIFF_RATIONAL格式的数据将通过使用双精度算术将分子除以分母来评估。

      TIFF_ASCII格式的数据将被解析为Double.parseDouble方法。

      参数:
      index - 数据的索引。
      返回:
      给定索引处的数据作为double
    • getAsString

      public String getAsString(int index)
      TIFFTag.TIFF_ASCII值作为String返回。
      参数:
      index - 数据的索引。
      返回:
      给定索引处的数据作为一个 String
      抛出:
      ClassCastException - 如果字段不是类型为 TIFF_ASCII
    • getAsSRational

      public int[] getAsSRational(int index)
      返回一个 TIFFTag.TIFF_SRATIONAL 数据项作为一个包含两个 int 的数组。
      参数:
      index - 数据的索引。
      返回:
      给定索引处的数据作为有符号有理数。
      抛出:
      ClassCastException - 如果字段不是类型为 TIFF_SRATIONAL
    • getAsRational

      public long[] getAsRational(int index)
      返回一个 TIFFTag.TIFF_RATIONAL 数据项作为一个包含两个 int 的数组。
      参数:
      index - 数据的索引。
      返回:
      给定索引处的数据作为无符号有理数。
      抛出:
      ClassCastException - 如果字段不是类型为 TIFF_RATIONAL
    • getValueAsString

      public String getValueAsString(int index)
      返回一个包含数据项的人类可读版本的 String。类型为 TIFFTag.TIFF_RATIONALTIFF_SRATIONAL 的数据表示为由一个 '/' 字符分隔的两个整数。如果 TIFFTag.TIFF_RATIONALTIFF_SRATIONAL 的分子是分母的整数倍,则该值表示为 "q/1",其中 q 是分子和分母的商。
      参数:
      index - 数据的索引。
      返回:
      给定索引处的数据作为一个 String
      抛出:
      ClassCastException - 如果字段不是合法字段类型之一。
    • hasDirectory

      public boolean hasDirectory()
      返回字段是否具有 TIFFDirectory
      返回:
      如果 getDirectory() 返回非空,则返回 true。
    • getDirectory

      public TIFFDirectory getDirectory()
      返回关联的 TIFFDirectory,如果可用。如果未设置目录,则将返回 null
      返回:
      TIFFDirectory 实例或 null。
    • clone

      public TIFFField clone() throws CloneNotSupportedException
      克隆字段及其中包含的所有信息。
      覆盖:
      clone 在类 Object
      返回:
      TIFFField 的克隆。
      抛出:
      CloneNotSupportedException - 如果无法克隆实例。
      参见: