expo-image-picker 17.0.4 → 17.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/android/build.gradle +2 -2
  3. package/expo-module.config.json +1 -1
  4. package/ios/ImageUtils.swift +20 -12
  5. package/ios/MediaHandler.swift +3 -3
  6. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/{17.0.4/expo.modules.imagepicker-17.0.4.module → 17.0.5/expo.modules.imagepicker-17.0.5.module} +7 -7
  7. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/17.0.5/expo.modules.imagepicker-17.0.5.module.md5 +1 -0
  8. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/17.0.5/expo.modules.imagepicker-17.0.5.module.sha1 +1 -0
  9. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/17.0.5/expo.modules.imagepicker-17.0.5.module.sha256 +1 -0
  10. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/17.0.5/expo.modules.imagepicker-17.0.5.module.sha512 +1 -0
  11. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/{17.0.4/expo.modules.imagepicker-17.0.4.pom → 17.0.5/expo.modules.imagepicker-17.0.5.pom} +1 -1
  12. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/17.0.5/expo.modules.imagepicker-17.0.5.pom.md5 +1 -0
  13. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/17.0.5/expo.modules.imagepicker-17.0.5.pom.sha1 +1 -0
  14. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/17.0.5/expo.modules.imagepicker-17.0.5.pom.sha256 +1 -0
  15. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/17.0.5/expo.modules.imagepicker-17.0.5.pom.sha512 +1 -0
  16. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/maven-metadata.xml +4 -4
  17. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/maven-metadata.xml.md5 +1 -1
  18. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/maven-metadata.xml.sha1 +1 -1
  19. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/maven-metadata.xml.sha256 +1 -1
  20. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/maven-metadata.xml.sha512 +1 -1
  21. package/package.json +3 -3
  22. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/17.0.4/expo.modules.imagepicker-17.0.4.module.md5 +0 -1
  23. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/17.0.4/expo.modules.imagepicker-17.0.4.module.sha1 +0 -1
  24. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/17.0.4/expo.modules.imagepicker-17.0.4.module.sha256 +0 -1
  25. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/17.0.4/expo.modules.imagepicker-17.0.4.module.sha512 +0 -1
  26. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/17.0.4/expo.modules.imagepicker-17.0.4.pom.md5 +0 -1
  27. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/17.0.4/expo.modules.imagepicker-17.0.4.pom.sha1 +0 -1
  28. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/17.0.4/expo.modules.imagepicker-17.0.4.pom.sha256 +0 -1
  29. package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/17.0.4/expo.modules.imagepicker-17.0.4.pom.sha512 +0 -1
  30. /package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/{17.0.4/expo.modules.imagepicker-17.0.4-sources.jar → 17.0.5/expo.modules.imagepicker-17.0.5-sources.jar} +0 -0
  31. /package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/{17.0.4/expo.modules.imagepicker-17.0.4-sources.jar.md5 → 17.0.5/expo.modules.imagepicker-17.0.5-sources.jar.md5} +0 -0
  32. /package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/{17.0.4/expo.modules.imagepicker-17.0.4-sources.jar.sha1 → 17.0.5/expo.modules.imagepicker-17.0.5-sources.jar.sha1} +0 -0
  33. /package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/{17.0.4/expo.modules.imagepicker-17.0.4-sources.jar.sha256 → 17.0.5/expo.modules.imagepicker-17.0.5-sources.jar.sha256} +0 -0
  34. /package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/{17.0.4/expo.modules.imagepicker-17.0.4-sources.jar.sha512 → 17.0.5/expo.modules.imagepicker-17.0.5-sources.jar.sha512} +0 -0
  35. /package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/{17.0.4/expo.modules.imagepicker-17.0.4.aar → 17.0.5/expo.modules.imagepicker-17.0.5.aar} +0 -0
  36. /package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/{17.0.4/expo.modules.imagepicker-17.0.4.aar.md5 → 17.0.5/expo.modules.imagepicker-17.0.5.aar.md5} +0 -0
  37. /package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/{17.0.4/expo.modules.imagepicker-17.0.4.aar.sha1 → 17.0.5/expo.modules.imagepicker-17.0.5.aar.sha1} +0 -0
  38. /package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/{17.0.4/expo.modules.imagepicker-17.0.4.aar.sha256 → 17.0.5/expo.modules.imagepicker-17.0.5.aar.sha256} +0 -0
  39. /package/local-maven-repo/host/exp/exponent/expo.modules.imagepicker/{17.0.4/expo.modules.imagepicker-17.0.4.aar.sha512 → 17.0.5/expo.modules.imagepicker-17.0.5.aar.sha512} +0 -0
package/CHANGELOG.md CHANGED
@@ -10,6 +10,12 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 17.0.5 — 2025-08-28
14
+
15
+ ### 🐛 Bug fixes
16
+
17
+ - [iOS] Fix wrong dimensions reported for portrait images ([#39230](https://github.com/expo/expo/pull/39230) by [@hirbod](https://github.com/hirbod))
18
+
13
19
  ## 17.0.4 — 2025-08-27
14
20
 
15
21
  _This version does not introduce any user-facing changes._
@@ -4,13 +4,13 @@ plugins {
4
4
  }
5
5
 
6
6
  group = 'host.exp.exponent'
7
- version = '17.0.4'
7
+ version = '17.0.5'
8
8
 
9
9
  android {
10
10
  namespace "expo.modules.imagepicker"
11
11
  defaultConfig {
12
12
  versionCode 22
13
- versionName "17.0.4"
13
+ versionName "17.0.5"
14
14
  testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
15
15
  }
16
16
  testOptions {
@@ -8,7 +8,7 @@
8
8
  "publication": {
9
9
  "groupId": "host.exp.exponent",
10
10
  "artifactId": "expo.modules.imagepicker",
11
- "version": "17.0.4",
11
+ "version": "17.0.5",
12
12
  "repository": "local-maven-repo"
13
13
  }
14
14
  }
@@ -350,25 +350,33 @@ internal struct ImageUtils {
350
350
  }
351
351
 
352
352
  /*
353
- * Extracts the pixel dimensions from an image file.
354
- * This method efficiently reads metadata without loading the entire image into memory.
353
+ * Extracts the visual dimensions from an image file, accounting for EXIF orientation.
354
+ * This ensures portrait images return portrait dimensions (height > width).
355
355
  * @param url The file URL of the image to analyze
356
- * @return A CGSize containing the width and height, or nil if the dimensions cannot be determined
356
+ * @return A CGSize containing the visual width and height, or nil if the dimensions cannot be determined
357
357
  */
358
- static func readSizeFrom(url: URL) -> CGSize? {
359
- // First, try to fetch the dimensions from the image metadata as this is the fastest way
360
- if let imageSource = CGImageSourceCreateWithURL(url as CFURL, nil),
358
+ static func readVisualSizeFrom(url: URL) -> CGSize? {
359
+ // Try to fetch the dimensions from the image metadata as this is the fastest way
360
+ guard let imageSource = CGImageSourceCreateWithURL(url as CFURL, nil),
361
361
  let properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) as? [CFString: Any],
362
362
  let width = properties[kCGImagePropertyPixelWidth] as? CGFloat,
363
- let height = properties[kCGImagePropertyPixelHeight] as? CGFloat {
364
- return CGSize(width: width, height: height)
363
+ let height = properties[kCGImagePropertyPixelHeight] as? CGFloat else {
364
+ // Fallback: minimally decode the image using UIImage when metadata is not available
365
+ if let img = UIImage(contentsOfFile: url.path) {
366
+ return CGSize(width: img.size.width, height: img.size.height)
367
+ }
368
+ return nil
365
369
  }
366
370
 
367
- // Fallback: minimally decode the image using UIImage when metadata is not available
368
- if let img = UIImage(contentsOfFile: url.path) {
369
- return CGSize(width: img.size.width, height: img.size.height)
371
+ // Check EXIF orientation to determine if dimensions should be swapped
372
+ let orientation = properties[kCGImagePropertyOrientation] as? Int ?? 1
373
+
374
+ // Orientations 5,6,7,8 (left/right rotated) need dimension swapping
375
+ if orientation >= 5 && orientation <= 8 {
376
+ return CGSize(width: height, height: width) // Swap for portrait
370
377
  }
371
378
 
372
- return nil
379
+ // Keep as is for landscape
380
+ return CGSize(width: width, height: height)
373
381
  }
374
382
  }
@@ -97,7 +97,7 @@ internal struct MediaHandler {
97
97
  imageData: imageData, orImageFileUrl: targetUrl, tryReadingFile: fileWasCopied) : nil
98
98
 
99
99
  let exif = options.exif ? await ImageUtils.readExifFrom(mediaInfo: mediaInfo) : nil
100
- let size = ImageUtils.readSizeFrom(url: targetUrl) ?? .zero
100
+ let size = CGSize(width: image.size.width, height: image.size.height)
101
101
 
102
102
  return AssetInfo(
103
103
  assetId: asset?.localIdentifier,
@@ -144,7 +144,7 @@ internal struct MediaHandler {
144
144
  let cachedUrl = targetUrl
145
145
  let fileExtension = "." + cachedUrl.pathExtension
146
146
 
147
- let size = ImageUtils.readSizeFrom(url: cachedUrl) ?? .zero
147
+ let size = ImageUtils.readVisualSizeFrom(url: cachedUrl) ?? .zero
148
148
  let fileSize = getFileSize(from: cachedUrl)
149
149
  let mimeType = getMimeType(from: cachedUrl.pathExtension)
150
150
  let fileName = itemProvider.suggestedName.map { $0 + fileExtension }
@@ -197,7 +197,7 @@ internal struct MediaHandler {
197
197
  let exif = options.exif ? ImageUtils.readExifFrom(data: rawData) : nil
198
198
  let base64 = options.base64 ? imageData?.base64EncodedString() : nil
199
199
 
200
- let size = ImageUtils.readSizeFrom(url: targetUrl) ?? .zero
200
+ let size = CGSize(width: image.size.width, height: image.size.height)
201
201
 
202
202
  return AssetInfo(
203
203
  assetId: selectedImage.assetIdentifier,
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "host.exp.exponent",
5
5
  "module": "expo.modules.imagepicker",
6
- "version": "17.0.4",
6
+ "version": "17.0.5",
7
7
  "attributes": {
8
8
  "org.gradle.status": "release"
9
9
  }
@@ -24,8 +24,8 @@
24
24
  },
25
25
  "files": [
26
26
  {
27
- "name": "expo.modules.imagepicker-17.0.4.aar",
28
- "url": "expo.modules.imagepicker-17.0.4.aar",
27
+ "name": "expo.modules.imagepicker-17.0.5.aar",
28
+ "url": "expo.modules.imagepicker-17.0.5.aar",
29
29
  "size": 149665,
30
30
  "sha512": "d6f26506b6110a18fa55886dca78f4ecf073fa3299c14d4efd36ef71b18ae065047ca641bed8cb57a72b34381d705742ace28e90c688b6c4ad0e29fc18b17945",
31
31
  "sha256": "82dea135594060c9e7736c85f5929597118d9a82df9a6bf848f428a5d172ce96",
@@ -95,8 +95,8 @@
95
95
  ],
96
96
  "files": [
97
97
  {
98
- "name": "expo.modules.imagepicker-17.0.4.aar",
99
- "url": "expo.modules.imagepicker-17.0.4.aar",
98
+ "name": "expo.modules.imagepicker-17.0.5.aar",
99
+ "url": "expo.modules.imagepicker-17.0.5.aar",
100
100
  "size": 149665,
101
101
  "sha512": "d6f26506b6110a18fa55886dca78f4ecf073fa3299c14d4efd36ef71b18ae065047ca641bed8cb57a72b34381d705742ace28e90c688b6c4ad0e29fc18b17945",
102
102
  "sha256": "82dea135594060c9e7736c85f5929597118d9a82df9a6bf848f428a5d172ce96",
@@ -115,8 +115,8 @@
115
115
  },
116
116
  "files": [
117
117
  {
118
- "name": "expo.modules.imagepicker-17.0.4-sources.jar",
119
- "url": "expo.modules.imagepicker-17.0.4-sources.jar",
118
+ "name": "expo.modules.imagepicker-17.0.5-sources.jar",
119
+ "url": "expo.modules.imagepicker-17.0.5-sources.jar",
120
120
  "size": 24487,
121
121
  "sha512": "baee9c33a5d10479e76876096bd9774b2dc7a6b8f73c2527400ff62989933b147a3bb003ef99883b39cb6a47fac491409f2872f08ed23dc194f712e4c0a48e32",
122
122
  "sha256": "650f592065589e4007e6c179729c59e138577cebee67e633fb14aeb42817f0aa",
@@ -0,0 +1 @@
1
+ 5a314c0d36a87c88b9862e891d6c5526a66998f639dc8f49c9e38363be4fa7ec
@@ -0,0 +1 @@
1
+ 767981be7743c29afc99046c630d4cad0b7748074886c52cbb8ee765b6c36c680e1274f8ab29f51303f38b640509c8ec685b71330d27cc7f7ac750dc8ebd2b47
@@ -9,7 +9,7 @@
9
9
  <modelVersion>4.0.0</modelVersion>
10
10
  <groupId>host.exp.exponent</groupId>
11
11
  <artifactId>expo.modules.imagepicker</artifactId>
12
- <version>17.0.4</version>
12
+ <version>17.0.5</version>
13
13
  <packaging>aar</packaging>
14
14
  <name>expo.modules.imagepicker</name>
15
15
  <url>https://github.com/expo/expo</url>
@@ -0,0 +1 @@
1
+ ae24c3b5f60ffcfb0888e6f70fd3a022ead75ad4a53c20225192c4a0a3014dfa
@@ -0,0 +1 @@
1
+ e11ec591b9f6c6a569f8cb8ccc7bd6dfd064c094692c09bf6cdcce3cf77fcd54c42cd0790ee2356a1439c0324b02bce8697caacdb578f1d4b04a83cea81c5072
@@ -3,11 +3,11 @@
3
3
  <groupId>host.exp.exponent</groupId>
4
4
  <artifactId>expo.modules.imagepicker</artifactId>
5
5
  <versioning>
6
- <latest>17.0.4</latest>
7
- <release>17.0.4</release>
6
+ <latest>17.0.5</latest>
7
+ <release>17.0.5</release>
8
8
  <versions>
9
- <version>17.0.4</version>
9
+ <version>17.0.5</version>
10
10
  </versions>
11
- <lastUpdated>20250827210801</lastUpdated>
11
+ <lastUpdated>20250828212809</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- 6e6e446a2d6f85127ccf9b308f6eedc7
1
+ 71e7e413552003210a1fd8795ede292c
@@ -1 +1 @@
1
- b0293acf1910f7866115b29a894fd3ac9578f407
1
+ d0cc51db3ca1f547c62a930ffa576cd2ba05f368
@@ -1 +1 @@
1
- 6a20a9b1bcd184324e9840a197a569ea2cb26fc1f28cebcd529157cb92c8e490
1
+ 4c36d0bf490639a63e78cf19f125df1e5231c51b43257afa252c70487c8f841c
@@ -1 +1 @@
1
- 6b80a19939a595b1e0ba815f74f50a8eca8b44b37d3174416bcb9cfa257a61f91cc411c261a538f3896cc47d79caf7b4fac86f49c48bc01e5a26b91dc2e294b4
1
+ cd053a053e1ec37f33e61f523785927064cffe6d60612919b3e2225fe7b8a45bfb991dab96dde8c7504fe4b983ef04feabf6d6b5abb353500026c392fa7f987a
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-image-picker",
3
- "version": "17.0.4",
3
+ "version": "17.0.5",
4
4
  "description": "Provides access to the system's UI for selecting images and videos from the phone's library or taking a photo with the camera.",
5
5
  "main": "build/ImagePicker.js",
6
6
  "types": "build/ImagePicker.d.ts",
@@ -39,11 +39,11 @@
39
39
  "expo-image-loader": "~6.0.0"
40
40
  },
41
41
  "devDependencies": {
42
- "expo-module-scripts": "^5.0.4",
42
+ "expo-module-scripts": "^5.0.5",
43
43
  "@testing-library/user-event": "^14.6.1"
44
44
  },
45
45
  "peerDependencies": {
46
46
  "expo": "*"
47
47
  },
48
- "gitHead": "48faa7b9a9f93a7660cb80aa118c7f6bf0aeff38"
48
+ "gitHead": "5e15f3a5d68bc213ad36d59113d725fdea4f3411"
49
49
  }
@@ -1 +0,0 @@
1
- cf01a326d64ba66048f3f91f664af53b37141fe2b2e2c794f35818ae71b78d0c
@@ -1 +0,0 @@
1
- 9c11a3ee614176da0d3b290b1d78aba6af32194a1841f9bec7acfa834d853b2c21300e3e3817141dbfb371893f37c40d31726055a8a2d47b71a9fd2e45676a75
@@ -1 +0,0 @@
1
- 2147d170cef4553e89511a9da4dfdbbbe50ce1b78a4570a5b0312e0ee13480ca
@@ -1 +0,0 @@
1
- e6e02a48c90699aaeb3c5aea04b51de28e1d774063cbfceeaf8a0665442e0bf4fdcb763b370fafd7b1087f4dc816b36c4eeccecfc8fd6ac2543f35ec464dd468