From 664781202c35a30da3469aa5626685bdf8334558 Mon Sep 17 00:00:00 2001 From: Raymond Chan Date: Fri, 5 Mar 2021 15:34:43 +0800 Subject: [PATCH] #1 - Fixing GIF being exported as JPG issue --- .../java/io/flutter/plugins/imagepicker/FileUtils.java | 10 +++++++--- .../plugins/imagepicker/ImagePickerDelegate.java | 5 +++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java b/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java index 9ebf1fad826b..92275503d993 100644 --- a/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java +++ b/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java @@ -25,6 +25,7 @@ import android.content.Context; import android.net.Uri; +import android.webkit.MimeTypeMap; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -39,7 +40,7 @@ String getPathFromUri(final Context context, final Uri uri) { OutputStream outputStream = null; boolean success = false; try { - String extension = getImageExtension(uri); + String extension = getImageExtension(context, uri); inputStream = context.getContentResolver().openInputStream(uri); file = File.createTempFile("image_picker", extension, context.getCacheDir()); file.deleteOnExit(); @@ -67,13 +68,16 @@ String getPathFromUri(final Context context, final Uri uri) { } /** @return extension of image with dot, or default .jpg if it none. */ - private static String getImageExtension(Uri uriImage) { + private static String getImageExtension(final Context context, Uri uriImage) { String extension = null; try { - String imagePath = uriImage.getPath(); + final String imagePath = uriImage.getPath(); if (imagePath != null && imagePath.lastIndexOf(".") != -1) { extension = imagePath.substring(imagePath.lastIndexOf(".") + 1); + } else if (imagePath != null && imagePath.lastIndexOf(".") == -1) { + final MimeTypeMap mime = MimeTypeMap.getSingleton(); + extension = mime.getExtensionFromMimeType(context.getContentResolver().getType(uriImage)); } } catch (Exception e) { extension = null; diff --git a/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java b/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java index ff7f1534a586..4acf03f7c19b 100644 --- a/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java +++ b/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java @@ -548,6 +548,11 @@ public void onPathReady(String path) { private void handleImageResult(String path, boolean shouldDeleteOriginalIfScaled) { if (methodCall != null) { + if (path.toLowerCase().endsWith(".gif")) { + finishWithSuccess(path); + return; + } + Double maxWidth = methodCall.argument("maxWidth"); Double maxHeight = methodCall.argument("maxHeight"); Integer imageQuality = methodCall.argument("imageQuality");