package com.droidmapper.util; import android.content.Context; import android.database.Cursor; import android.media.ExifInterface; import android.net.Uri; import android.provider.MediaStore; import android.util.Log; import java.io.IOException; /** * A class that contains utility methods used by other classes. */ public class Util { private static final String TAG = Util.class.getName(); /** * Private constructor because we want to prevent other classes from making instances of this * class. */ private Util() { } /** * Gets the real path to an image from its Uri. For example, gets "/mnt/sdcard/sample.jpg" from * something like "content://media/external/images/media/17". * * @param context current application context. * @param contentURI Uri to an image file. * @return File path to the file whose Uri was supplied. */ public static String getFilePathFromUri(Context context, Uri contentURI) { String result; Cursor cursor = context.getContentResolver().query(contentURI, null, null, null, null); if (cursor == null) { // Source is Dropbox or other similar local file path result = contentURI.getPath(); } else { cursor.moveToFirst(); int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); result = cursor.getString(idx); cursor.close(); } return result; } /** * A helper method that copies exif tag from the source image to the dest image. * * @param pathSource path to source image. * @param pathDest path to destination image. */ public static void copyExifTags(String pathSource, String pathDest, int destWidth, int destHeight) { Log.d(TAG, "copyExifTags() :: pathSource = " + pathSource); Log.d(TAG, "copyExifTags() :: pathDest = " + pathDest); Log.d(TAG, "copyExifTags() :: destWidth = " + destWidth); Log.d(TAG, "copyExifTags() :: destHeight = " + destHeight); try { ExifInterface exifSrc = new ExifInterface(pathSource); ExifInterface exifDest = new ExifInterface(pathDest); String val = exifSrc.getAttribute(ExifInterface.TAG_APERTURE); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_APERTURE, val); } val = exifSrc.getAttribute(ExifInterface.TAG_DATETIME); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_DATETIME, val); } val = exifSrc.getAttribute(ExifInterface.TAG_EXPOSURE_TIME); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_EXPOSURE_TIME, val); } val = exifSrc.getAttribute(ExifInterface.TAG_FLASH); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_FLASH, val); } val = exifSrc.getAttribute(ExifInterface.TAG_FOCAL_LENGTH); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_FOCAL_LENGTH, val); } val = exifSrc.getAttribute(ExifInterface.TAG_GPS_ALTITUDE); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_GPS_ALTITUDE, val); } val = exifSrc.getAttribute(ExifInterface.TAG_GPS_ALTITUDE_REF); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_GPS_ALTITUDE_REF, val); } val = exifSrc.getAttribute(ExifInterface.TAG_GPS_DATESTAMP); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_GPS_DATESTAMP, val); } val = exifSrc.getAttribute(ExifInterface.TAG_GPS_LATITUDE); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_GPS_LATITUDE, val); } val = exifSrc.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, val); } val = exifSrc.getAttribute(ExifInterface.TAG_GPS_LONGITUDE); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, val); } val = exifSrc.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, val); } val = exifSrc.getAttribute(ExifInterface.TAG_GPS_PROCESSING_METHOD); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_GPS_PROCESSING_METHOD, val); } val = exifSrc.getAttribute(ExifInterface.TAG_GPS_TIMESTAMP); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_GPS_TIMESTAMP, val); } val = exifSrc.getAttribute(ExifInterface.TAG_ISO); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_ISO, val); } val = exifSrc.getAttribute(ExifInterface.TAG_MAKE); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_MAKE, val); } val = exifSrc.getAttribute(ExifInterface.TAG_MODEL); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_MODEL, val); } val = exifSrc.getAttribute(ExifInterface.TAG_ORIENTATION); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_ORIENTATION, val); } val = exifSrc.getAttribute(ExifInterface.TAG_WHITE_BALANCE); if (val != null) { exifDest.setAttribute(ExifInterface.TAG_WHITE_BALANCE, val); } exifDest.setAttribute(ExifInterface.TAG_IMAGE_LENGTH, String.valueOf(destHeight)); exifDest.setAttribute(ExifInterface.TAG_IMAGE_WIDTH, String.valueOf(destWidth)); exifDest.saveAttributes(); } catch (IOException e) { e.printStackTrace(); } } }