Package org.apache.sanselan.formats.tiff

Examples of org.apache.sanselan.formats.tiff.TiffField


    {
        Hashtable fieldMap = new Hashtable();
        for (int i = 0; i < items.size(); i++)
        {
            TiffImageMetadata.Item item = (TiffImageMetadata.Item) items.get(i);
            TiffField field = item.getTiffField();
            Object key = new Integer(field.tag);
            if (!fieldMap.containsKey(key))
                fieldMap.put(key, field);
        }
        return fieldMap;
View Full Code Here


            for (int j = 0; j < oldFieldTags.size(); j++)
            {
                Integer fieldTag = (Integer) oldFieldTags.get(j);

                TiffField oldField = (TiffField) oldFieldMap.get(fieldTag);
                TiffField newField = (TiffField) newFieldMap.get(fieldTag);

                //                Debug.debug("fieldTag", fieldTag);
                //                Debug.debug("oldField", oldField);
                //                Debug.debug("newField", newField);

                //                fieldTag.
                assertNotNull(oldField);
                assertNotNull(newField);

                assertEquals(oldField.tag, newField.tag);
                assertEquals(dirType.intValue(), newField.directoryType);
                assertEquals(oldField.directoryType, newField.directoryType);
                assertEquals(oldField.length, newField.length);
                assertEquals(oldField.isLocalValue(), newField.isLocalValue());

                if (oldField.tag == 0x202)
                {
                    // ignore "jpg from raw length" value. may have off-by-one bug in certain cameras.
                    // i.e. Sony DCR-PC110
                    continue;
                }

                if (!oldField.tagInfo.isOffset())
                {
                    if (oldField.tagInfo.isText())
                        ;
                    else if (oldField.isLocalValue())
                    {
                        //                        Debug.debug("oldField.tag", oldField.tag);
                        //                        Debug.debug("newField.tag", newField.tag);
                        //                        Debug.debug("oldField.tagInfo", oldField.tagInfo);
                        //                        Debug.debug("newField.tagInfo", newField.tagInfo);
                        //                        Debug.debug("oldField.fieldType", oldField.fieldType);
                        //                        Debug.debug("newField.fieldType", newField.fieldType);
                        //                        Debug.debug("oldField.getBytesLength", oldField
                        //                                .getBytesLength());
                        //                        Debug.debug("newField.getBytesLength", newField
                        //                                .getBytesLength());
                        //
                        //                        Debug.debug("oldField.valueOffsetBytes",
                        //                                oldField.valueOffsetBytes);
                        //                        Debug.debug("newField.valueOffsetBytes",
                        //                                newField.valueOffsetBytes);

                        String label = imageFile.getName() +
                                       ", dirType[" + i + "]=" + dirType +
                                       ", fieldTag[" + j + "]=" + fieldTag;
                        if (oldField.tag == 0x116 || oldField.tag == 0x117)
                            compare(label, oldField, newField);
                        else {
                            compare(label, oldField.valueOffsetBytes,
                                           newField.valueOffsetBytes,
                                           oldField.getBytesLength(),
                                           newField.getBytesLength());
                        }
                    }
                    else
                    {
                        //                        Debug.debug("oldField.tagInfo", oldField.tagInfo);
View Full Code Here

                    System.out.println("    " + "GPS Latitude (Degrees North): " + latitude);
                }
            }

            // more specific example of how to manually access GPS values
            TiffField gpsLatitudeRefField = jpegMetadata
                    .findEXIFValueWithExactMatch(TiffConstants.GPS_TAG_GPS_LATITUDE_REF);
            TiffField gpsLatitudeField = jpegMetadata
                    .findEXIFValueWithExactMatch(TiffConstants.GPS_TAG_GPS_LATITUDE);
            TiffField gpsLongitudeRefField = jpegMetadata
                    .findEXIFValueWithExactMatch(TiffConstants.GPS_TAG_GPS_LONGITUDE_REF);
            TiffField gpsLongitudeField = jpegMetadata
                    .findEXIFValueWithExactMatch(TiffConstants.GPS_TAG_GPS_LONGITUDE);
            if (gpsLatitudeRefField != null && gpsLatitudeField != null
                    && gpsLongitudeRefField != null
                    && gpsLongitudeField != null)
            {
                // all of these values are strings.
                String gpsLatitudeRef = (String) gpsLatitudeRefField.getValue();
                RationalNumber gpsLatitude[] = (RationalNumber[]) (gpsLatitudeField
                        .getValue());
                String gpsLongitudeRef = (String) gpsLongitudeRefField
                        .getValue();
                RationalNumber gpsLongitude[] = (RationalNumber[]) gpsLongitudeField
                        .getValue();

                RationalNumber gpsLatitudeDegrees = gpsLatitude[0];
                RationalNumber gpsLatitudeMinutes = gpsLatitude[1];
                RationalNumber gpsLatitudeSeconds = gpsLatitude[2];
View Full Code Here

    }

    private static void printTagValue(JpegImageMetadata jpegMetadata,
            TagInfo tagInfo)
    {
        TiffField field = jpegMetadata.findEXIFValueWithExactMatch(tagInfo);
        if (field == null)
            System.out.println(tagInfo.name + ": " + "Not Found.");
        else
            System.out.println(tagInfo.name + ": "
                    + field.getValueDescription());
    }
View Full Code Here

        List fields = exif.getAllFields();
        Map fieldMap = new Hashtable();
        // Build a simplified field tag -> field map, ignoring directory structures.
        // Good enough for our purposes, since the image in question is known.
        for (int i = 0; i < fields.size(); i++) {
            TiffField field = (TiffField) fields.get(i);
            fieldMap.put(new Integer(field.tag), field);
        }

        Map expectedFieldValues = new Hashtable();
        expectedFieldValues.put(new Integer(EXIF_TAG_MAKE.tag), "Canon");
        expectedFieldValues.put(new Integer(EXIF_TAG_MODEL.tag), "Canon PowerShot SD750");
        expectedFieldValues.put(new Integer(EXIF_TAG_MODIFY_DATE.tag), "2007:12:25 13:34:39");
        Iterator expectedTags = expectedFieldValues.keySet().iterator();
        while (expectedTags.hasNext()) {
            Integer tag = (Integer) expectedTags.next();
            Object expectedValue = expectedFieldValues.get(tag);

            assertTrue(fieldMap.containsKey(tag));
            TiffField field = (TiffField) fieldMap.get(tag);
            assertNotNull(field);
            Object value = field.getValue();
            assertNotNull(value);
            assertEquals(value, expectedValue);
        }
    }
View Full Code Here

            return;

        List fields = exif.getAllFields();
        for (int i = 0; i < fields.size(); i++)
        {
            TiffField field = (TiffField) fields.get(i);
            checkField(imageFile, field);
        }

    }
View Full Code Here

    public JpegPhotoshopMetadata getPhotoshop() {
        return photoshop;
    }

    public TiffField findEXIFValue(TagInfo tagInfo) {
        TiffField field = findEXIFValue(tagInfo, true);
        if (field == null) {
            // In some cases, we want an exact directory match (such as GPS values).
            // In other cases, we are more permissive (ie. with tags that may appear
            // in a number of different directories, depending on the camera manufacturer, etc.
            // TODO: Modify TagInfo class to include a "permissive/exact" flag.
View Full Code Here

            Object o = items.get(i);
            if (!(o instanceof TiffImageMetadata.Item))
                continue;

            TiffImageMetadata.Item item = (TiffImageMetadata.Item) o;
            TiffField field = item.getTiffField();
            if (requireDirectoryMatch &&
                    (field.directoryType != tagInfo.directoryType.directoryType)) {
                continue;
            }
            if (field.tag == tagInfo.tag)
View Full Code Here

                    byteSource, params);

            if (metadata != null)
            {
                {
                    TiffField field = metadata
                            .findEXIFValue(TIFF_TAG_XRESOLUTION);
                    if (field != null)
                        x_density = ((Number) field.getValue()).doubleValue();
                }
                {
                    TiffField field = metadata
                            .findEXIFValue(TIFF_TAG_YRESOLUTION);
                    if (field != null)
                        y_density = ((Number) field.getValue()).doubleValue();
                }
                {
                    TiffField field = metadata
                            .findEXIFValue(TIFF_TAG_RESOLUTION_UNIT);
                    if (field != null)
                    {
                        int density_units = ((Number) field.getValue())
                                .intValue();

                        switch (density_units)
                        {
                        case 1:
View Full Code Here

            return null;
        }

        Wpt result = new Wpt();
        Number[] r3;
        TiffField e;

        /* map datum */
        e = gpsIfd.findField(TiffConstants.GPS_TAG_GPS_MAP_DATUM);
        if(e == null){
            warn("GPS datum missing. Assuming WGS84.");
        } else {
            String svalue = (String) e.getValue();
            if(svalue.equals("")){
                System.err.println("Warning: GPS datum missing. Assuming WGS84.");
            } else if(!svalue.toUpperCase().replaceAll("[^0-9A-Z]", "").equals("WGS84")){
                throw new MetadataException("GPS datum is " + svalue +
                    ". Currently only coordinates in the WGS84 "+
                    "map datum can be handled.");
            }
        }

        /* latitude */
        e = gpsIfd.findField(TiffConstants.GPS_TAG_GPS_LATITUDE);
        if(e == null){
           throw new MetadataException("GPS latitude missing.");
        }
        r3 = (Number[]) e.getValue();
        e = gpsIfd.findField(TiffConstants.GPS_TAG_GPS_LATITUDE_REF);
        if(e == null){
            String sysprop = System.getProperty("DefaultGPSLatitudeRef");
            char s0 = (sysprop == null || sysprop.length() == 0)
            ? 'X'
            : sysprop.toUpperCase().charAt(0);
            if(s0 != 'N' && s0 != 'S'){
                throw new MetadataException("GPS latitude found but GPS latitude reference missing or invalid.\n"+
                    "    To use the GPS latitude information set the DefaultGPSLatitudeRef system property to N or S, e. g.\n"+
                    "    java -DDefaultGPSLatitudeRef=N -jar gpsdings.jar ...");
            }
            result.setLat(asBigDecimalDegrees(r3, String.valueOf(s0)));
        } else {
            result.setLat(asBigDecimalDegrees(r3, (String) e.getValue()));
        }

        /* longitude */
        e = gpsIfd.findField(TiffConstants.GPS_TAG_GPS_LONGITUDE);
        if(e == null){
           throw new MetadataException("GPS longitude missing.");
        }
        r3 = (Number[]) e.getValue();
        e = gpsIfd.findField(TiffConstants.GPS_TAG_GPS_LONGITUDE_REF);
        if(e == null){
            String sysprop = System.getProperty("DefaultGPSLongitudeRef");
            final char s0 = (sysprop == null || sysprop.length() == 0)
            ? 'X'
            : sysprop.toUpperCase().charAt(0);
            if(s0 != 'E' && s0 != 'W'){
                throw new MetadataException("GPS longitude found but GPS longitude reference missing or invalid.\n"+
                    "    To use the GPS longitude information set the DefaultGPSLongitudeRef system property to W or E, e. g.\n"+
                    "    java -DDefaultGPSLongitudeRef=E -jar gpsdings.jar ...");
            }
            result.setLon(asBigDecimalDegrees(r3, String.valueOf(s0)));
        } else {
            result.setLon(asBigDecimalDegrees(r3, (String) e.getValue()));
        }

        /* elevation */
        e = gpsIfd.findField(TiffConstants.GPS_TAG_GPS_ALTITUDE);
        if(e != null){
            double alti = ((Number) e.getValue()).doubleValue();
            e = gpsIfd.findField(TiffConstants.GPS_TAG_GPS_ALTITUDE_REF);
            if (e == null){
                warn("GPSAltitudeRef missing. Assuming above sea level.");
            } else {
                int altref = ((Number) e.getValue()).intValue() * (-2) + 1; // 0 -> 1 && 1 -> -1
                if (Math.abs(altref) != 1 ){
                    System.err.printf("WARNING: illegal GPSAltitudeRef %d. Assuming above sea level.\n",
                        altref);
                    altref = 1;
                }
                alti *= altref;
            }
            result.setEle(new BigDecimal(alti));
        }

        /* dateTime */
        e = gpsIfd.findField(TiffConstants.GPS_TAG_GPS_TIME_STAMP);
        if(e != null){
            r3 = (Number[]) e.getValue();
            long millis = Math.round(asDouble(r3, 3.6e6));
            e = gpsIfd.findField(TiffConstants.GPS_TAG_GPS_DATE_STAMP);
            if (e != null){
                Date d = null;
                try{
                    d = AbstractExecExifWriter.parseExifDate((String) e.getValue());
                    d = new Date(d.getTime() + millis);
                    result.setTime(d);
                } catch (ParseException ex){
                    System.err.println(ex);
                }
View Full Code Here

TOP

Related Classes of org.apache.sanselan.formats.tiff.TiffField

Copyright © 2018 www.massapicom. 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.