Package io.lumify.imageMetadataHelper

Source Code of io.lumify.imageMetadataHelper.ImageTransformExtractor

package io.lumify.imageMetadataHelper;

import com.drew.imaging.ImageMetadataReader;
import com.drew.imaging.ImageProcessingException;
import com.drew.metadata.Metadata;
import com.drew.metadata.exif.ExifIFD0Directory;
import io.lumify.core.util.LumifyLogger;
import io.lumify.core.util.LumifyLoggerFactory;
import io.lumify.imageMetadataExtractor.ImageTransform;

import java.io.File;
import java.io.IOException;

public class ImageTransformExtractor {
    private static final LumifyLogger LOGGER = LumifyLoggerFactory.getLogger(ImageTransformExtractor.class);

    public static ImageTransform getImageTransform(File localFile) {

        //new ImageTransform(false, 0) is the original image orientation, with no flip needed, and no rotation needed.
        ImageTransform imageTransform = new ImageTransform(false, 0);

        try {
            //Attempt to retrieve the metadata from the image.
            Metadata metadata = ImageMetadataReader.readMetadata(localFile);
            if (metadata != null) {
                ExifIFD0Directory exifDir = metadata.getDirectory(ExifIFD0Directory.class);
                if (exifDir != null) {
                    Integer orientationInteger = exifDir.getInteger(ExifIFD0Directory.TAG_ORIENTATION);
                    if (orientationInteger != null) {
                        imageTransform = convertOrientationToTransform(orientationInteger);
                    }
                }
            }
        } catch (ImageProcessingException e) {
            LOGGER.warn("drewnoakes metadata extractor threw ImageProcessingException when reading metadata." +
                    " Returning default orientation for image.");
        } catch (IOException e) {
            LOGGER.warn("drewnoakes metadata extractor threw IOException when reading metadata." +
                    " Returning default orientation for image.");
        }

        return imageTransform;
    }

    /**
     * Converts an orientation number to an ImageTransform object used by Lumify.
     *
     * @param orientationInt The EXIF orientation number, from 1 - 8, representing the combinations of 4 different
     *                       rotations and 2 different flipped values.
     * @return
     */
    public static ImageTransform convertOrientationToTransform(int orientationInt) {
        switch (orientationInt) {
            case 1:
                return new ImageTransform(false, 0);
            case 2:
                return new ImageTransform(true, 0);
            case 3:
                return new ImageTransform(false, 180);
            case 4:
                return new ImageTransform(true, 180);
            case 5:
                return new ImageTransform(true, 270);
            case 6:
                return new ImageTransform(false, 90);
            case 7:
                return new ImageTransform(true, 90);
            case 8:
                return new ImageTransform(false, 270);
            default:
                return new ImageTransform(false, 0);
        }
    }
}
TOP

Related Classes of io.lumify.imageMetadataHelper.ImageTransformExtractor

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.