Cohelad
Cohelad

Reputation: 121

How to save capture image with EXIF

i'm trying to capture image with android native camera, the save image is good but doesnt contain the usual EXIF data (gps tags, orientation...)

what do i need to do to save also the EXIF?

         @Override
        public void onClick(View v) {

            Intent takePictureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            // Ensure that there's a camera activity to handle the intent
            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                // Create the File where the photo should go
                File photoFile = null;
                try {
                    photoFile = createImageFile();
                } catch (IOException ex) {
                    // Error occurred while creating the File

                }
                // Continue only if the File was successfully created
                if (photoFile != null) {
                    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(photoFile));

                    imageuri = Uri.fromFile(photoFile);
                    startActivityForResult(takePictureIntent, CAMERA_PIC_REQUEST);
                }
            }

            /*Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);*/
        }
    }

    @SuppressLint("SimpleDateFormat")
    private File createImageFile() throws IOException {
        // Create an image file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = "JPEG_" + timeStamp + "_";
        File storageDir = Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_PICTURES);
        File image = File.createTempFile(
                imageFileName,  /* prefix */
                ".jpg",         /* suffix */
                storageDir      /* directory */
                );

        // Save a file: path for use with ACTION_VIEW intents
        mCurrentPhotoPath = "file:" + image.getAbsolutePath();
        return image;
    }

Upvotes: 3

Views: 2263

Answers (3)

Ahmad Wahaj
Ahmad Wahaj

Reputation: 81

Following is the method to Save an Image with EXIF Data (Location Data) to Gallery:

private String saveToGallery (Bitmap bitmapImage){
                            ContextWrapper cw = new ContextWrapper(getApplicationContext());
                            // path to Directory
                            String photoDir = Environment.getExternalStorageDirectory() + "/" + Environment.DIRECTORY_DCIM + "/";
                            File directory = new File(photoDir);

                            // Creates image file with the name "newimage.jpg"
                            File myfilepath = new File(directory, "newimage.jpg");

                            FileOutputStream fos = null;
                            try {
                                fos = new FileOutputStream(myfilepath);
                                // Use the compress method on the BitMap object to write image to the OutputStream
                                bitgallery.compress(Bitmap.CompressFormat.JPEG, 80, fos);

                                fos.flush();
                                fos.close();
                                myfilepath.setReadable(true, false);
                            } catch (Exception e) {
                                e.printStackTrace();
                            }

                            Uri bitmapUri = Uri.fromFile(myfilepath);

                            String currentImageFile = bitmapUri.getPath();

                            //Writes Exif Information to the Image
                            try {
                                ExifInterfaceEx exif = new ExifInterfaceEx(currentImageFile);
                                Log.w("Location", String.valueOf(targetLocation));
                                exif.setLocation(targetLocation);
                                exif.saveAttributes();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                            // Updating Gallery with the Image (Sending Broadcast to Gallery)
                            Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                            File f = new File(currentImageFile);
                            Uri contentUri = Uri.fromFile(f);
                            mediaScanIntent.setData(contentUri);
                            this.sendBroadcast(mediaScanIntent);
                            return directory.getAbsolutePath();
                        }

Upvotes: 1

SHIDHIN TS
SHIDHIN TS

Reputation: 1665

Here is the function to save the Image,

public static String saveImageInExternalCacheDir(Context context, Bitmap bitmap, String myfileName) {
    String fileName = myfileName.replace(' ', '_') + getCurrentDate().toString().replace(' ', '_').replace(":", "_");
    String filePath = (context.getExternalCacheDir()).toString() + "/" + fileName + ".jpg";
    try {
        FileOutputStream fos = new FileOutputStream(new File(filePath));
        bitmap.compress(Bitmap.CompressFormat.JPEG, 85, fos);
        fos.flush();
        fos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return filePath;
}

Upvotes: 0

Alex Cohn
Alex Cohn

Reputation: 57173

The new image is not parsed, as it should be, by the MediaScanner. This smells like a device-specific bug.

See Image, saved to sdcard, doesn't appear in Android's Gallery app for workarounds.

Upvotes: 0

Related Questions