Package gov.nara.nwts.ftappImg.tif

Source Code of gov.nara.nwts.ftappImg.tif.TifExtractor

package gov.nara.nwts.ftappImg.tif;

import gov.nara.nwts.ftappImg.tags.DefaultExtractor;
import gov.nara.nwts.ftappImg.tags.XMPExtractor;
import gov.nara.nwts.ftappImg.tags.ImageTags.TAGS;
import gov.nara.nwts.ftappImg.tags.ImageTags.TAGLOC;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import com.adobe.xmp.XMPException;
import com.adobe.xmp.XMPMetaFactory;
import com.sun.media.jai.codec.FileSeekableStream;
import com.sun.media.jai.codec.TIFFDirectory;
import com.sun.media.jai.codec.TIFFField;

/**
* Helper class for traversing TIF metadata
* @author TBrady
*
*/
public class TifExtractor extends DefaultExtractor {
  File file;
  TIFFDirectory tiffdir;
  FileSeekableStream fss;
  public XMPExtractor xmpex;
 
  public TifExtractor(File f) {
    this.file = f;
    try {
      fss = new FileSeekableStream(f);
      if (fss != null) {
        tiffdir = new TIFFDirectory(fss, 0);
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    try {
      xmpex = new XMPExtractor();
      TIFFField tf = tiffdir.getField(TAGS.TIFF_XMP.tag);
      if (tf==null) return;
      xmpex = new XMPExtractor(XMPMetaFactory.parseFromBuffer(tf.getAsBytes()));
    } catch (XMPException e) {
      e.printStackTrace();
    }
  }
 
  public Object getTiffInt(TAGS tag) {
    if (tiffdir == null) return "";
    return getTiffInt(tiffdir.getField(tag.tag));
  }
  public Object getTiffInt(int tag) {
    if (tiffdir == null) return "";
    return getTiffInt(tiffdir.getField(tag));
  }
  public Object getTiffInt(TIFFField tf) {
    if (tf == null) return "";
    if (tf.getCount()==0) return "";
    return tf.getAsInt(0);
  }

  public String getTiffString(TAGS tag) {
    if (tiffdir == null) return "";
    if (tag.tiffloc == TAGLOC.XMP) {
      String[] path = new String[2];
      path[0] = tag.tagtype.ns;
      path[1] = tag.path;
      return getXMP(path);
    }
    return getTiffString(tiffdir.getField(tag.tag));
  }

  public String getString(TAGS tag) {
    return getTiffString(tag);
  }
 
  public String getTiffString(int tag) {
    if (tiffdir == null) return "";
    return getTiffString(tiffdir.getField(tag));
  }
  public String getTiffString(TIFFField tf) {
    if (tf == null) return "";
    if (tf.getCount()==0) return "";
    return getTiffObject(tf).toString();
    //return tf.getAsString(0);
  }
 
  public Object getTiffObject(TIFFField tf) {
    if (tiffdir == null) return "";
    try {
      if (tf.getType() == TIFFField.TIFF_SHORT) {
        return tf.getAsInt(0);
      } else if (tf.getType() == TIFFField.TIFF_DOUBLE) {
        return tf.getAsDouble(0);
      } else if (tf.getType() == TIFFField.TIFF_LONG) {
        return tf.getAsLong(0);
      } else if (tf.getType() == TIFFField.TIFF_FLOAT) {
        return tf.getAsFloat(0);
      } else if (tf.getType() == TIFFField.TIFF_BYTE) {
        return " - not shown -";
      } else if (tf.getType() == TIFFField.TIFF_RATIONAL) {
        StringBuffer buf = new StringBuffer();
        for(long l: tf.getAsRational(0)) {
          if (buf.length()>0) buf.append(",");
          buf.append(l);
        }
        return buf.toString();
      } else if (tf.getType() == TIFFField.TIFF_UNDEFINED) {
        return "Undef: ";
      } else if (tf.getType() == TIFFField.TIFF_SBYTE) {
        return "Undef: ";
      }
      return tf.getAsString(0);
    } catch (Exception e) {
      e.printStackTrace();
      return "**" + tf.getType();
    }
  }
 

  public String getTagName(TIFFField tf) {
    if (tiffdir == null) return "";
    int tag = tf.getTag();
    TAGS tags = getTagDef(tf);
    if (tags == TAGS.UNDEFINED) {
      return "Tiff Tag " + tag;
    }
    return tags.name();
  }
  public TAGS getTagDef(TIFFField tf) {
    if (tiffdir == null) return TAGS.UNDEFINED;
    int tag = tf.getTag();
   
    for(TAGS t: TAGS.values()) {
      if (t.tiffloc == TAGLOC.TAG && tag == t.tag) {
        return t;
      }
    }
    return TAGS.UNDEFINED;
  }
 
  public ArrayList<Object> getTags() {
    ArrayList<Object> list = new ArrayList<Object>();
    if (tiffdir != null){
      for(TIFFField tf: tiffdir.getFields()) {
        list.add(tf);
      }
    }
    if (xmpex != null){
      list.addAll(xmpex.getTags());     
    }
    return list;
  }
 
 
  public String getXMP(String[] xmppath) {
    return xmpex.getXMP(xmppath);
  }
 
  public void close() {
    try {
      if (fss != null) fss.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }


}
TOP

Related Classes of gov.nara.nwts.ftappImg.tif.TifExtractor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.