@@ -42,9 +42,9 @@ public class Image {
4242
4343
4444 private IIOMetadata metadata ;
45- private HashMap <Integer , String > exif ;
46- private HashMap <Integer , String > iptc ;
47- private HashMap <Integer , String > gps ;
45+ private HashMap <Integer , Object > exif ;
46+ private HashMap <Integer , Object > iptc ;
47+ private HashMap <Integer , Object > gps ;
4848
4949
5050 //**************************************************************************
@@ -623,7 +623,7 @@ public void rotateCounterClockwise(){
623623 */
624624 public void rotate (){
625625 try {
626- Integer orientation = Integer . parseInt ( getExifTags ().get (0x0112 ) );
626+ Integer orientation = ( Integer ) getExifTags ().get (0x0112 );
627627 switch (orientation ) {
628628 case 1 : return ; //"Top, left side (Horizontal / normal)"
629629 case 2 : flip (); break ; //"Top, right side (Mirror horizontal)";
@@ -1431,13 +1431,13 @@ public byte[] getIptcData(){
14311431 System.out.println("Copyright: " + iptc.get(0x0274));
14321432 </pre>
14331433 */
1434- public HashMap <Integer , String > getIptcTags (){
1434+ public HashMap <Integer , Object > getIptcTags (){
14351435
14361436 if (iptc ==null ){
1437- iptc = new HashMap <Integer , String >();
1437+ iptc = new HashMap <Integer , Object >();
14381438 for (IIOMetadataNode marker : getUnknownTags (0xED )){
14391439 byte [] iptcData = (byte []) marker .getUserObject ();
1440- HashMap <Integer , String > tags = new MetadataParser (iptcData , 0xED ).getTags ("IPTC" );
1440+ HashMap <Integer , Object > tags = new MetadataParser (iptcData , 0xED ).getTags ("IPTC" );
14411441 iptc .putAll (tags );
14421442 }
14431443 }
@@ -1459,20 +1459,20 @@ public byte[] getExifData(){
14591459 //** getExifTags
14601460 //**************************************************************************
14611461 /** Used to parse EXIF metadata and return a list of key/value pairs found
1462- * in the metadata. Any unknown or unparsed fields are returned in Base64
1463- * encoding (including the EXIF MakerNote). You can retrieve specific EXIF
1464- * metadata values like this:
1462+ * in the metadata. Values can be Strings, Integers, or raw Byte Arrays.
1463+ * You can retrieve specific EXIF metadata values like this:
14651464 <pre>
14661465 javaxt.io.Image image = new javaxt.io.Image("/temp/image.jpg");
1467- java.util.HashMap<Integer, String > exif = image.getExifTags();
1466+ java.util.HashMap<Integer, Object > exif = image.getExifTags();
14681467 System.out.println("Date: " + exif.get(0x0132));
14691468 System.out.println("Camera: " + exif.get(0x0110));
14701469 System.out.println("Focal Length: " + exif.get(0x920A));
14711470 System.out.println("F-Stop: " + exif.get(0x829D));
14721471 System.out.println("Shutter Speed: " + exif.get(0x829A));
14731472 </pre>
1473+ * Note that the EXIF MakerNote is not parsed.
14741474 */
1475- public HashMap <Integer , String > getExifTags (){
1475+ public HashMap <Integer , Object > getExifTags (){
14761476 if (exif ==null ) parseExif ();
14771477 return exif ;
14781478 }
@@ -1482,10 +1482,10 @@ public HashMap<Integer, String> getExifTags(){
14821482 //** getGpsTags
14831483 //**************************************************************************
14841484 /** Used to parse EXIF metadata and return a list of key/value pairs
1485- * associated with GPS metadata. Any unknown or undefined fields are
1486- * returned in Base64 encoding.
1485+ * associated with GPS metadata. Values can be Strings, Integers, or raw
1486+ * Byte Arrays.
14871487 */
1488- public HashMap <Integer , String > getGpsTags (){
1488+ public HashMap <Integer , Object > getGpsTags (){
14891489 if (gps ==null ) parseExif ();
14901490 return gps ;
14911491 }
@@ -1494,14 +1494,14 @@ public HashMap<Integer, String> getGpsTags(){
14941494 /** Private method used to initialize the exif and gps hashmaps */
14951495 private void parseExif (){
14961496
1497- exif = new HashMap <Integer , String >();
1498- gps = new HashMap <Integer , String >();
1497+ exif = new HashMap <Integer , Object >();
1498+ gps = new HashMap <Integer , Object >();
14991499 for (IIOMetadataNode marker : getUnknownTags (0xE1 )){
15001500 byte [] exifData = (byte []) marker .getUserObject ();
15011501
15021502 MetadataParser metadataParser = new MetadataParser (exifData , 0xE1 );
1503- HashMap <Integer , String > exif = metadataParser .getTags ("EXIF" );
1504- HashMap <Integer , String > gps = metadataParser .getTags ("GPS" );
1503+ HashMap <Integer , Object > exif = metadataParser .getTags ("EXIF" );
1504+ HashMap <Integer , Object > gps = metadataParser .getTags ("GPS" );
15051505
15061506 if (exif !=null ) this .exif .putAll (exif );
15071507 if (gps !=null ) this .gps .putAll (gps );
@@ -1520,10 +1520,10 @@ private void parseExif(){
15201520 public double [] getGPSCoordinate (){
15211521 getExifTags ();
15221522 try {
1523- Double lat = getCoordinate (gps .get (0x0002 ));
1524- Double lon = getCoordinate (gps .get (0x0004 ));
1525- String latRef = gps .get (0x0001 ); //N
1526- String lonRef = gps .get (0x0003 ); //W
1523+ Double lat = getCoordinate (( String ) gps .get (0x0002 ));
1524+ Double lon = getCoordinate (( String ) gps .get (0x0004 ));
1525+ String latRef = ( String ) gps .get (0x0001 ); //N
1526+ String lonRef = ( String ) gps .get (0x0003 ); //W
15271527
15281528 if (!latRef .equalsIgnoreCase ("N" )) lat = -lat ;
15291529 if (!lonRef .equalsIgnoreCase ("E" )) lon = -lon ;
@@ -1575,7 +1575,7 @@ private double getCoordinate(String RationalArray) {
15751575 */
15761576 public String getGPSDatum (){
15771577 getExifTags ();
1578- return gps .get (0x0012 );
1578+ return ( String ) gps .get (0x0012 );
15791579 }
15801580
15811581
@@ -1673,7 +1673,7 @@ private class MetadataParser {
16731673 private final int FMT_ULONG = 4 ;
16741674 private final int FMT_URATIONAL = 5 ;
16751675 private final int FMT_SBYTE = 6 ;
1676- private final int FMT_UNDEFINED = 7 ;
1676+ // private final int FMT_UNDEFINED = 7;
16771677 private final int FMT_SSHORT = 8 ;
16781678 private final int FMT_SLONG = 9 ;
16791679 private final int FMT_SRATIONAL = 10 ;
@@ -1688,8 +1688,8 @@ private class MetadataParser {
16881688 private final int TAG_GPS_OFFSET = 0x8825 ;
16891689 private final int TAG_USERCOMMENT = 0x9286 ;
16901690
1691- private HashMap <String , HashMap <Integer , String >> tags =
1692- new HashMap <String , HashMap <Integer , String >>();
1691+ private HashMap <String , HashMap <Integer , Object >> tags =
1692+ new HashMap <String , HashMap <Integer , Object >>();
16931693
16941694
16951695 public MetadataParser (byte [] data , int marker ) {
@@ -1709,7 +1709,7 @@ public MetadataParser(byte[] data, int marker) {
17091709 */
17101710 private void parseIptc (byte [] iptcData ) {
17111711
1712- HashMap <Integer , String > tags = new HashMap <Integer , String >();
1712+ HashMap <Integer , Object > tags = new HashMap <Integer , Object >();
17131713 this .tags .put ("IPTC" , tags );
17141714
17151715 data = iptcData ;
@@ -1763,7 +1763,7 @@ private void parseIptc(byte[] iptcData) {
17631763 */
17641764 public void parseExif (byte [] exifData ) {
17651765
1766- HashMap <Integer , String > tags = new HashMap <Integer , String >();
1766+ HashMap <Integer , Object > tags = new HashMap <Integer , Object >();
17671767 this .tags .put ("EXIF" , tags );
17681768
17691769
@@ -1813,12 +1813,12 @@ public void parseExif(byte[] exifData) {
18131813 //**************************************************************************
18141814 /** Returns key/value pairs representing the EXIF or IPTC data.
18151815 */
1816- public HashMap <Integer , String > getTags (String dir ) {
1816+ public HashMap <Integer , Object > getTags (String dir ) {
18171817 return tags .get (dir );
18181818 }
18191819
18201820
1821- private void processExifDir (int dirStart , int offsetBase , HashMap <Integer , String > tags ) {
1821+ private void processExifDir (int dirStart , int offsetBase , HashMap <Integer , Object > tags ) {
18221822 if (dirStart >=data .length ) return ;
18231823
18241824
@@ -1864,7 +1864,7 @@ private void processExifDir(int dirStart, int offsetBase, HashMap<Integer, Strin
18641864
18651865 tags = this .tags .get (dirName );
18661866 if (tags ==null ){
1867- tags = new HashMap <Integer , String >();
1867+ tags = new HashMap <Integer , Object >();
18681868 this .tags .put (dirName , tags );
18691869 }
18701870
@@ -1895,7 +1895,7 @@ private void processExifDir(int dirStart, int offsetBase, HashMap<Integer, Strin
18951895 case FMT_SSHORT :
18961896 case FMT_ULONG :
18971897 case FMT_SLONG :
1898- tags .put (tag , "" + (int ) getDouble (format , valueOffset ));
1898+ tags .put (tag , (int ) getDouble (format , valueOffset ));
18991899 break ;
19001900 case FMT_URATIONAL :
19011901 case FMT_SRATIONAL :
@@ -1919,8 +1919,8 @@ private void processExifDir(int dirStart, int offsetBase, HashMap<Integer, Strin
19191919
19201920
19211921 default : //including FMT_UNDEFINED
1922- String result = javaxt . utils . Base64 . encodeBytes ( getUndefined (valueOffset , byteCount ) );
1923- if (result !=null && result . length ()> 0 ) tags .put (tag , result );
1922+ byte [] result = getUndefined (valueOffset , byteCount );
1923+ if (result !=null ) tags .put (tag , result );
19241924 break ;
19251925 }
19261926
0 commit comments