Skip to content

Commit def6558

Browse files
Merge pull request #1879 from invideoio/fix/heic-heif-compression-support
[ANDROID] Fix: Compression support for HEIC and HEIF image types in Android
2 parents fe37124 + 8846bc8 commit def6558

File tree

3 files changed

+20
-9
lines changed

3 files changed

+20
-9
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 10.3.4
2+
## Android
3+
- Detect HEIC and HEIF extensions as valid image
4+
- Use compression format based file extension when compressing images.
5+
16
## 10.3.3
27
### Android
38
- Updated compileSdk to use flutter.compileSdkVersion. [#1842](https://github.com/miguelpruivo/flutter_file_picker/issues/1842)

android/src/main/kotlin/com/mr/flutter/plugin/filepicker/FileUtils.kt

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,7 @@ object FileUtils {
380380

381381
return extension.contentEquals("jpg") || extension.contentEquals("jpeg")
382382
|| extension.contentEquals("png") || extension.contentEquals("webp")
383+
|| extension.contentEquals("heic") || extension.contentEquals("heif")
383384
}
384385

385386
private fun getFileExtension(context: Context, uri: Uri): String? {
@@ -397,20 +398,25 @@ object FileUtils {
397398
}
398399
}
399400

401+
private fun getCompressFormatBasedFileExtension(format: Bitmap.CompressFormat): String {
402+
return when (format) {
403+
Bitmap.CompressFormat.PNG -> "png"
404+
Bitmap.CompressFormat.WEBP -> "webp"
405+
else -> "jpeg"
406+
}
407+
}
408+
400409
@JvmStatic
401410
fun compressImage(originalImageUri: Uri, compressionQuality: Int, context: Context): Uri {
402411
val compressedUri: Uri
403412
try {
404413
context.contentResolver.openInputStream(originalImageUri).use { imageStream ->
405-
val compressedFile = createImageFile(context, originalImageUri)
414+
val compressFormat = getCompressFormat(context, originalImageUri)
415+
val compressedFile = createImageFile(context, originalImageUri, compressFormat)
406416
val originalBitmap = BitmapFactory.decodeStream(imageStream)
407417
// Compress and save the image
408418
val fileOutputStream = FileOutputStream(compressedFile)
409-
originalBitmap.compress(
410-
getCompressFormat(context, originalImageUri),
411-
compressionQuality,
412-
fileOutputStream
413-
)
419+
originalBitmap.compress(compressFormat, compressionQuality, fileOutputStream)
414420
fileOutputStream.flush()
415421
fileOutputStream.close()
416422
compressedUri = Uri.fromFile(compressedFile)
@@ -422,11 +428,11 @@ object FileUtils {
422428
}
423429

424430
@Throws(IOException::class)
425-
private fun createImageFile(context: Context, uri: Uri): File {
431+
private fun createImageFile(context: Context, uri: Uri, compressFormat: Bitmap.CompressFormat): File {
426432
val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
427433
val imageFileName = "IMAGE_" + timeStamp + "_"
428434
val storageDir = context.cacheDir
429-
return File.createTempFile(imageFileName, "." + getFileExtension(context, uri), storageDir)
435+
return File.createTempFile(imageFileName, "." + getCompressFormatBasedFileExtension(compressFormat), storageDir)
430436
}
431437

432438
/**

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ description: A package that allows you to use a native file explorer to pick sin
33
homepage: https://github.com/miguelpruivo/plugins_flutter_file_picker
44
repository: https://github.com/miguelpruivo/flutter_file_picker
55
issue_tracker: https://github.com/miguelpruivo/flutter_file_picker/issues
6-
version: 10.3.3
6+
version: 10.3.4
77

88
dependencies:
99
flutter:

0 commit comments

Comments
 (0)