diff --git a/android/src/main/java/com/reactnative/ivpusic/imagepicker/Compression.java b/android/src/main/java/com/reactnative/ivpusic/imagepicker/Compression.java index 5ea266c56..24ff24d7d 100644 --- a/android/src/main/java/com/reactnative/ivpusic/imagepicker/Compression.java +++ b/android/src/main/java/com/reactnative/ivpusic/imagepicker/Compression.java @@ -64,10 +64,25 @@ File resize( imageDirectory.mkdirs(); } - File resizeImageFile = new File(imageDirectory, UUID.randomUUID() + ".jpg"); + String extension = originalImagePath.substring(originalImagePath.lastIndexOf(".") + 1); + + final String resizeImageFileExtension; + final Bitmap.CompressFormat compressFormat; + if (extension.equals("png")) { + resizeImageFileExtension = ".png"; + compressFormat = Bitmap.CompressFormat.PNG; + } else { + resizeImageFileExtension = ".jpg"; + compressFormat = Bitmap.CompressFormat.JPEG; + } + + File resizeImageFile = new File( + imageDirectory, + UUID.randomUUID() + resizeImageFileExtension + ); OutputStream os = new BufferedOutputStream(new FileOutputStream(resizeImageFile)); - bitmap.compress(Bitmap.CompressFormat.JPEG, quality, os); + bitmap.compress(compressFormat, quality, os); // Don't set unnecessary exif attribute if (shouldSetOrientation(originalOrientation)) { diff --git a/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java b/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java index 248f06b8a..08d02d960 100644 --- a/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java +++ b/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java @@ -53,7 +53,6 @@ import java.util.concurrent.Callable; - class PickerModule extends ReactContextBaseJavaModule implements ActivityEventListener { private static final int IMAGE_PICKER_REQUEST = 61110; @@ -526,8 +525,7 @@ private static Long getVideoDuration(String path) { retriever.setDataSource(path); return Long.parseLong(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)); - } - catch(Exception e) { + } catch (Exception e) { return -1L; } } @@ -729,7 +727,6 @@ private void configureCropperColors(UCrop.Options options) { private void startCropping(final Activity activity, final Uri uri) { UCrop.Options options = new UCrop.Options(); - options.setCompressionFormat(Bitmap.CompressFormat.JPEG); options.setCompressionQuality(100); options.setCircleDimmedLayer(cropperCircleOverlay); options.setFreeStyleCropEnabled(freeStyleCropEnabled); @@ -754,15 +751,28 @@ private void startCropping(final Activity activity, final Uri uri) { configureCropperColors(options); } - UCrop uCrop = UCrop - .of(uri, Uri.fromFile(new File(this.getTmpDir(activity), UUID.randomUUID().toString() + ".jpg"))) - .withOptions(options); + try { + String originalImagePath = resolveRealPath(activity, uri, false); + String extension = originalImagePath.substring(originalImagePath.lastIndexOf(".")); - if (width > 0 && height > 0) { - uCrop.withAspectRatio(width, height); - } + if (extension.equals(".png")) { + options.setCompressionFormat(Bitmap.CompressFormat.PNG); + } else { + options.setCompressionFormat(Bitmap.CompressFormat.JPEG); + } + + UCrop uCrop = UCrop + .of(uri, Uri.fromFile(new File(this.getTmpDir(activity), UUID.randomUUID().toString() + extension))) + .withOptions(options); + + if (width > 0 && height > 0) { + uCrop.withAspectRatio(width, height); + } - uCrop.start(activity); + uCrop.start(activity); + } catch (Exception e) { + resultCollector.notifyProblem(E_NO_IMAGE_DATA_FOUND, e.getMessage()); + } } private void imagePickerResult(Activity activity, final int requestCode, final int resultCode, final Intent data) {