001 package railo.runtime.img; 002 003 import java.io.IOException; 004 import java.io.InputStream; 005 import java.util.Iterator; 006 007 import railo.commons.io.IOUtil; 008 import railo.commons.io.res.Resource; 009 import railo.runtime.exp.PageException; 010 import railo.runtime.type.KeyImpl; 011 import railo.runtime.type.Struct; 012 import railo.runtime.type.StructImpl; 013 014 import com.drew.imaging.jpeg.JpegMetadataReader; 015 import com.drew.imaging.jpeg.JpegProcessingException; 016 import com.drew.imaging.tiff.TiffMetadataReader; 017 import com.drew.metadata.Directory; 018 import com.drew.metadata.Metadata; 019 import com.drew.metadata.MetadataException; 020 import com.drew.metadata.Tag; 021 022 public class ImageMetaDrew { 023 024 /** 025 * adds information about a image to the given struct 026 * @param info 027 * @throws PageException 028 * @throws IOException 029 * @throws MetadataException 030 * @throws JpegProcessingException 031 */ 032 public static void addInfo(String format, Resource res, Struct info) { 033 if("jpg".equalsIgnoreCase(format))jpg(res, info); 034 else if("tiff".equalsIgnoreCase(format))tiff(res, info); 035 036 } 037 038 private static void jpg(Resource res,Struct info) { 039 InputStream is=null; 040 try { 041 is = res.getInputStream(); 042 fill(info,JpegMetadataReader.readMetadata(is)); 043 } 044 catch(Throwable t) { 045 //throw Caster.toPageException(t); 046 } 047 finally { 048 IOUtil.closeEL(is); 049 } 050 } 051 052 private static void tiff(Resource res,Struct info) { 053 InputStream is=null; 054 try { 055 is = res.getInputStream(); 056 fill(info,TiffMetadataReader.readMetadata(is)); 057 } 058 catch(Throwable t) { 059 //throw Caster.toPageException(t); 060 } 061 finally { 062 IOUtil.closeEL(is); 063 } 064 } 065 066 private static void fill(Struct info,Metadata metadata) throws MetadataException { 067 Iterator<Directory> directories = metadata.getDirectoryIterator(); 068 while (directories.hasNext()) { 069 Directory directory = directories.next(); 070 Struct sct=new StructImpl(); 071 info.setEL(KeyImpl.init(directory.getName()), sct); 072 073 Iterator<Tag> tags = directory.getTagIterator(); 074 while (tags.hasNext()) { 075 Tag tag = tags.next(); 076 sct.setEL(KeyImpl.init(tag.getTagName()), tag.getDescription()); 077 } 078 } 079 } 080 081 public static void test() { 082 // to not delete, this methd is called to test if the jar exists 083 084 } 085 086 087 088 }