expo-image 3.0.0-canary-20250331-817737a → 3.0.0-canary-20250402-161f57b

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.
package/CHANGELOG.md CHANGED
@@ -9,6 +9,7 @@
9
9
  ### 🎉 New features
10
10
 
11
11
  - type-compatibility with react-native 0.77 ([#34027](https://github.com/expo/expo/pull/34027) by [@vonovak](https://github.com/vonovak))
12
+ - Added `ImageSource.useAppleWebpCodec` on iOS to allow using libwebp codec for better animation performance on some images. ([#35802](https://github.com/expo/expo/pull/35802) by [@kudo](https://github.com/kudo))
12
13
 
13
14
  ### 🐛 Bug fixes
14
15
 
@@ -21,6 +22,10 @@
21
22
  - [Android] Started using expo modules gradle plugin. ([#34176](https://github.com/expo/expo/pull/34176) by [@lukmccall](https://github.com/lukmccall))
22
23
  - [iOS] Fix warnings which will become errors in Swift 6. ([#35428](https://github.com/expo/expo/pull/35428) by [@behenate](https://github.com/behenate))
23
24
 
25
+ ### 📚 3rd party library updates
26
+
27
+ - Bumped `SDWebImage` to 5.21.0. ([#35795](https://github.com/expo/expo/pull/35795) by [@kudo](https://github.com/kudo))
28
+
24
29
  ## 2.0.7 - 2025-03-26
25
30
 
26
31
  ### 🐛 Bug fixes
@@ -8,7 +8,7 @@ android {
8
8
  namespace "expo.modules.image"
9
9
  defaultConfig {
10
10
  versionCode 1
11
- versionName "2.0.2"
11
+ versionName "3.0.0-canary-20250402-161f57b"
12
12
  consumerProguardFiles("proguard-rules.pro")
13
13
 
14
14
  buildConfigField("boolean", "ALLOW_GLIDE_LOGS", project.properties.get("EXPO_ALLOW_GLIDE_LOGS", "false"))
@@ -59,6 +59,18 @@ export type ImageSource = {
59
59
  * @platform ios
60
60
  */
61
61
  isAnimated?: boolean;
62
+ /**
63
+ * Whether to use the Apple system WebP codec.
64
+ *
65
+ * When set to `true`, use the Apple system WebP codec from `SDWebImageAWebPCoder`.
66
+ * When set to `false`, use the libwebp codec from `SDWebImageWebPCoder`.
67
+ * The Apple system WebP codec is faster and uses less memory, but it has some issues with animated WebP images.
68
+ * @see https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#awebp-coder
69
+ *
70
+ * @default true
71
+ * @platform ios
72
+ */
73
+ useAppleWebpCodec?: boolean;
62
74
  };
63
75
  /**
64
76
  * @hidden
@@ -1 +1 @@
1
- {"version":3,"file":"Image.types.d.ts","sourceRoot":"","sources":["../src/Image.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Image.types.d.ts","sourceRoot":"","sources":["../src/Image.types.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,12 @@
4
4
  "modules": ["ImageModule"]
5
5
  },
6
6
  "android": {
7
- "modules": ["expo.modules.image.ExpoImageModule"]
7
+ "modules": ["expo.modules.image.ExpoImageModule"],
8
+ "publication": {
9
+ "groupId": "BareExpo",
10
+ "artifactId": "expo.modules.image",
11
+ "version": "3.0.0-canary-20250402-161f57b",
12
+ "repository": "https://maven.pkg.github.com/expo/expo"
13
+ }
8
14
  }
9
15
  }
@@ -19,9 +19,10 @@ Pod::Spec.new do |s|
19
19
  s.static_framework = true
20
20
 
21
21
  s.dependency 'ExpoModulesCore'
22
- s.dependency 'SDWebImage', '~> 5.19.1'
22
+ s.dependency 'SDWebImage', '~> 5.21.0'
23
23
  s.dependency 'SDWebImageAVIFCoder', '~> 0.11.0'
24
24
  s.dependency 'SDWebImageSVGCoder', '~> 1.7.0'
25
+ s.dependency 'SDWebImageWebPCoder', '~> 0.14.6'
25
26
  s.dependency 'libavif/libdav1d'
26
27
 
27
28
  # Swift/Objective-C compatibility
@@ -209,8 +209,7 @@ public final class ImageModule: Module {
209
209
  }
210
210
 
211
211
  static func registerCoders() {
212
- // By default Animated WebP is not supported
213
- SDImageCodersManager.shared.addCoder(SDImageAWebPCoder.shared)
212
+ SDImageCodersManager.shared.addCoder(WebPCoder.shared)
214
213
  SDImageCodersManager.shared.addCoder(SDImageAVIFCoder.shared)
215
214
  SDImageCodersManager.shared.addCoder(SDImageSVGCoder.shared)
216
215
  SDImageCodersManager.shared.addCoder(SDImageHEICCoder.shared)
@@ -21,6 +21,9 @@ struct ImageSource: Record {
21
21
  @Field
22
22
  var cacheKey: String?
23
23
 
24
+ @Field
25
+ var useAppleWebpCodec: Bool = true
26
+
24
27
  var pixelCount: Double {
25
28
  return width * height * scale * scale
26
29
  }
@@ -103,24 +103,7 @@ func shouldDownscale(image: UIImage, toSize size: CGSize, scale: Double) -> Bool
103
103
  }
104
104
 
105
105
  /**
106
- Resizes the animated image to fit in the given size and scale.
107
- */
108
- func resize(animatedImage image: UIImage, toSize size: CGSize, scale: Double) -> UIImage {
109
- if image.sd_isAnimated,
110
- let animatedImage = image as? AnimatedImage,
111
- let actualCoder = animatedImage.animatedCoder {
112
- let animatedCoder = ResizedAnimatedCoder(actualCoder: actualCoder, size: size, scale: scale)
113
- if let result = AnimatedImage(animatedCoder: animatedCoder, scale: scale) {
114
- return result
115
- }
116
- }
117
-
118
- // fallback to a resized static image
119
- return resize(image: image, toSize: size, scale: scale)
120
- }
121
-
122
- /**
123
- Resizes a still image to fit in the given size and scale.
106
+ Resizes a static image to fit in the given size and scale.
124
107
  */
125
108
  func resize(image: UIImage, toSize size: CGSize, scale: Double) -> UIImage {
126
109
  let format = UIGraphicsImageRendererFormat()
@@ -190,6 +173,11 @@ func createSDWebImageContext(forSource source: ImageSource, cachePolicy: ImageCa
190
173
  // which has better compatibility with the UIImage and fixes issues with the image duration.
191
174
  context[.animatedImageClass] = AnimatedImage.self
192
175
 
176
+ // Passing useAppleWebpCodec into WebPCoder
177
+ context[.imageDecodeOptions] = [
178
+ imageCoderOptionUseAppleWebpCodec: source.useAppleWebpCodec
179
+ ]
180
+
193
181
  // Assets from the bundler have `scale` prop which needs to be passed to the context,
194
182
  // otherwise they would be saved in cache with scale = 1.0 which may result in
195
183
  // incorrectly rendered images for resize modes that don't scale (`center` and `repeat`).
@@ -139,13 +139,10 @@ public final class ImageView: ExpoView {
139
139
  // It seems that `UIImageView` can't tint some vector graphics. If the `tintColor` prop is specified,
140
140
  // we tell the SVG coder to decode to a bitmap instead. This will become useless when we switch to SVGNative coder.
141
141
  if imageTintColor != nil {
142
- context[.imageDecodeOptions] = [
143
- SDImageCoderOption.webImageContext: [
144
- "svgPrefersBitmap": true,
145
- "svgImageSize": sdImageView.bounds.size,
146
- "svgImagePreserveAspectRatio": true
147
- ]
148
- ]
142
+ var decodeOptions = context[.imageDecodeOptions] as? [SDImageCoderOption: Any] ?? [:]
143
+ decodeOptions[.decodeThumbnailPixelSize] = sdImageView.bounds.size
144
+ decodeOptions[.decodePreserveAspectRatio] = true
145
+ context[.imageDecodeOptions] = decodeOptions
149
146
  }
150
147
 
151
148
  // Some loaders (e.g. PhotoLibraryAssetLoader) may need to know the screen scale.
@@ -348,9 +345,15 @@ public final class ImageView: ExpoView {
348
345
  guard let image = image, !bounds.isEmpty else {
349
346
  return nil
350
347
  }
348
+ sdImageView.animationTransformer = nil
351
349
  // Downscale the image only when necessary
352
350
  if allowDownscaling && shouldDownscale(image: image, toSize: idealSize, scale: scale) {
353
- return resize(animatedImage: image, toSize: idealSize, scale: scale)
351
+ if image.sd_isAnimated {
352
+ let size = idealSize * scale
353
+ sdImageView.animationTransformer = SDImageResizingTransformer(size: size, scaleMode: .fill)
354
+ return image
355
+ }
356
+ return resize(image: image, toSize: idealSize, scale: scale)
354
357
  }
355
358
  return image
356
359
  }
@@ -0,0 +1,73 @@
1
+ // Copyright 2015-present 650 Industries. All rights reserved.
2
+
3
+ import SDWebImage
4
+ import SDWebImageWebPCoder
5
+
6
+ internal let imageCoderOptionUseAppleWebpCodec = SDImageCoderOption(rawValue: "useAppleWebpCodec")
7
+
8
+ /**
9
+ A composite WebP coder that uses either `SDImageAWebPCoder` or `SDImageWebPCoder`
10
+ based on the passed `imageCoderOptionUseAppleWebpCodec` option.
11
+ */
12
+ internal final class WebPCoder: NSObject, SDAnimatedImageCoder {
13
+ static let shared = WebPCoder()
14
+
15
+ private var useAppleWebpCodec: Bool = true
16
+ private var instantiatedCoder: SDAnimatedImageCoder?
17
+ private var coder: SDAnimatedImageCoder {
18
+ if let instantiatedCoder {
19
+ return instantiatedCoder
20
+ }
21
+ return self.useAppleWebpCodec ? SDImageAWebPCoder.shared : SDImageWebPCoder.shared
22
+ }
23
+
24
+ override init() {
25
+ super.init()
26
+ }
27
+
28
+ // MARK: - SDAnimatedImageCoder implementations
29
+
30
+ convenience init(animatedImageData data: Data?, options: [SDImageCoderOption: Any]? = nil) {
31
+ self.init()
32
+ self.useAppleWebpCodec = options?[imageCoderOptionUseAppleWebpCodec] as? Bool ?? true
33
+ self.instantiatedCoder = self.useAppleWebpCodec
34
+ ? SDImageAWebPCoder.init(animatedImageData: data, options: options)
35
+ : SDImageWebPCoder.init(animatedImageData: data, options: options)
36
+ }
37
+
38
+ func canDecode(from data: Data?) -> Bool {
39
+ return self.coder.canDecode(from: data)
40
+ }
41
+
42
+ func decodedImage(with data: Data?, options: [SDImageCoderOption: Any]? = nil) -> UIImage? {
43
+ return self.coder.decodedImage(with: data, options: options)
44
+ }
45
+
46
+ func canEncode(to format: SDImageFormat) -> Bool {
47
+ return self.coder.canEncode(to: format)
48
+ }
49
+
50
+ func encodedData(with image: UIImage?, format: SDImageFormat, options: [SDImageCoderOption: Any]? = nil) -> Data? {
51
+ return self.coder.encodedData(with: image, format: format, options: options)
52
+ }
53
+
54
+ var animatedImageData: Data? {
55
+ return self.coder.animatedImageData
56
+ }
57
+
58
+ var animatedImageFrameCount: UInt {
59
+ return self.coder.animatedImageFrameCount
60
+ }
61
+
62
+ var animatedImageLoopCount: UInt {
63
+ return self.coder.animatedImageLoopCount
64
+ }
65
+
66
+ func animatedImageFrame(at index: UInt) -> UIImage? {
67
+ return self.coder.animatedImageFrame(at: index)
68
+ }
69
+
70
+ func animatedImageDuration(at index: UInt) -> TimeInterval {
71
+ return self.coder.animatedImageDuration(at: index)
72
+ }
73
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "expo-image",
3
3
  "title": "Expo Image",
4
- "version": "3.0.0-canary-20250331-817737a",
4
+ "version": "3.0.0-canary-20250402-161f57b",
5
5
  "description": "A cross-platform, performant image component for React Native and Expo with Web support",
6
6
  "main": "src/index.ts",
7
7
  "types": "build/index.d.ts",
@@ -28,10 +28,10 @@
28
28
  "license": "MIT",
29
29
  "dependencies": {},
30
30
  "devDependencies": {
31
- "expo-module-scripts": "4.0.5-canary-20250331-817737a"
31
+ "expo-module-scripts": "4.0.5-canary-20250402-161f57b"
32
32
  },
33
33
  "peerDependencies": {
34
- "expo": "53.0.0-canary-20250331-817737a",
34
+ "expo": "53.0.0-canary-20250402-161f57b",
35
35
  "react": "*",
36
36
  "react-native": "*",
37
37
  "react-native-web": "*"
@@ -40,5 +40,6 @@
40
40
  "react-native-web": {
41
41
  "optional": true
42
42
  }
43
- }
43
+ },
44
+ "gitHead": "161f57bb5f579c84f8fa0337ec596034e21760f6"
44
45
  }
@@ -64,6 +64,19 @@ export type ImageSource = {
64
64
  * @platform ios
65
65
  */
66
66
  isAnimated?: boolean;
67
+
68
+ /**
69
+ * Whether to use the Apple system WebP codec.
70
+ *
71
+ * When set to `true`, use the Apple system WebP codec from `SDWebImageAWebPCoder`.
72
+ * When set to `false`, use the libwebp codec from `SDWebImageWebPCoder`.
73
+ * The Apple system WebP codec is faster and uses less memory, but it has some issues with animated WebP images.
74
+ * @see https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#awebp-coder
75
+ *
76
+ * @default true
77
+ * @platform ios
78
+ */
79
+ useAppleWebpCodec?: boolean;
67
80
  };
68
81
 
69
82
  /**
@@ -1,68 +0,0 @@
1
- // Copyright 2024-present 650 Industries. All rights reserved.
2
-
3
- import SDWebImage
4
-
5
- /**
6
- An animated image resizer that adjusts an already loaded `SDAnimatedImage`.
7
- This is not a formal SDWebImage coder; it's used solely to leverage the SDWebImage loading pipeline.
8
- */
9
- internal final class ResizedAnimatedCoder: NSObject, SDAnimatedImageCoder {
10
- private let actualCoder: SDAnimatedImageCoder
11
- private let size: CGSize
12
- private let scale: Double
13
-
14
- // swiftlint:disable:next unavailable_function
15
- init(animatedImageData data: Data?, options: [SDImageCoderOption: Any]? = nil) {
16
- fatalError("Unsupported initializer")
17
- }
18
-
19
- init(actualCoder: SDAnimatedImageCoder, size: CGSize, scale: Double) {
20
- self.actualCoder = actualCoder
21
- self.size = size
22
- self.scale = scale
23
- super.init()
24
- }
25
-
26
- // MARK: - SDImageCoder implementations
27
-
28
- func canDecode(from data: Data?) -> Bool {
29
- return actualCoder.canDecode(from: data)
30
- }
31
-
32
- func decodedImage(with data: Data?, options: [SDImageCoderOption: Any]? = nil) -> UIImage? {
33
- return actualCoder.decodedImage(with: data, options: options)
34
- }
35
-
36
- func canEncode(to format: SDImageFormat) -> Bool {
37
- return actualCoder.canEncode(to: format)
38
- }
39
-
40
- func encodedData(with image: UIImage?, format: SDImageFormat, options: [SDImageCoderOption: Any]? = nil) -> Data? {
41
- return actualCoder.encodedData(with: image, format: format, options: options)
42
- }
43
-
44
- // MARK: - SDAnimatedImageProvider implementations
45
-
46
- var animatedImageData: Data? {
47
- return actualCoder.animatedImageData
48
- }
49
-
50
- var animatedImageFrameCount: UInt {
51
- return actualCoder.animatedImageFrameCount
52
- }
53
-
54
- var animatedImageLoopCount: UInt {
55
- return actualCoder.animatedImageLoopCount
56
- }
57
-
58
- func animatedImageFrame(at index: UInt) -> UIImage? {
59
- guard let frame = actualCoder.animatedImageFrame(at: index) else {
60
- return nil
61
- }
62
- return resize(image: frame, toSize: self.size, scale: self.scale)
63
- }
64
-
65
- func animatedImageDuration(at index: UInt) -> TimeInterval {
66
- return actualCoder.animatedImageDuration(at: index)
67
- }
68
- }