expo-paste-input 0.1.10 → 0.1.11

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.
@@ -492,12 +492,15 @@ class ExpoPasteInputView: ExpoView {
492
492
  // Then, add static image file paths
493
493
  if !images.isEmpty {
494
494
  for image in images {
495
+ let normalizedImage = image.normalizedOrientation()
496
+ let hasAlpha = normalizedImage.hasAlpha
497
+
495
498
  // Preserve transparency for images with alpha channel
496
499
  let imageData: Data?
497
- if image.hasAlpha {
498
- imageData = image.pngData()
500
+ if hasAlpha {
501
+ imageData = normalizedImage.pngData()
499
502
  } else {
500
- imageData = image.jpegData(compressionQuality: 0.8)
503
+ imageData = normalizedImage.jpegData(compressionQuality: 0.8)
501
504
  }
502
505
 
503
506
  guard let imageData = imageData else {
@@ -505,7 +508,7 @@ class ExpoPasteInputView: ExpoView {
505
508
  }
506
509
 
507
510
  let tempDir = FileManager.default.temporaryDirectory
508
- let fileExtension = image.hasAlpha ? ".png" : ".jpg"
511
+ let fileExtension = hasAlpha ? ".png" : ".jpg"
509
512
  let fileName = UUID().uuidString + fileExtension
510
513
  let fileURL = tempDir.appendingPathComponent(fileName)
511
514
 
@@ -563,14 +566,11 @@ class ExpoPasteInputView: ExpoView {
563
566
  return nil
564
567
  }
565
568
 
566
- // Get the first image from the source
567
- guard let cgImage = CGImageSourceCreateImageAtIndex(imageSource, 0, nil) else {
569
+ // Create UIImage from the original data so imageOrientation from metadata is preserved.
570
+ guard let image = UIImage(data: data) else {
568
571
  return nil
569
572
  }
570
573
 
571
- // Create UIImage from CGImage (this is safer than UIImage(data:))
572
- let image = UIImage(cgImage: cgImage)
573
-
574
574
  // Validate the image has valid dimensions
575
575
  guard image.size.width > 0 && image.size.height > 0 else {
576
576
  return nil
@@ -625,4 +625,17 @@ extension UIImage {
625
625
  let alphaInfo = cgImage.alphaInfo
626
626
  return alphaInfo != .none && alphaInfo != .noneSkipFirst && alphaInfo != .noneSkipLast
627
627
  }
628
- }
628
+
629
+ func normalizedOrientation() -> UIImage {
630
+ guard imageOrientation != .up else { return self }
631
+ guard size.width > 0 && size.height > 0 else { return self }
632
+
633
+ let format = UIGraphicsImageRendererFormat.default()
634
+ format.scale = scale
635
+ format.opaque = !hasAlpha
636
+
637
+ return UIGraphicsImageRenderer(size: size, format: format).image { _ in
638
+ draw(in: CGRect(origin: .zero, size: size))
639
+ }
640
+ }
641
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-paste-input",
3
- "version": "0.1.10",
3
+ "version": "0.1.11",
4
4
  "description": "A wrapper around React Native TextInput to paste images and GIFs from the clipboard (iOS, Android, Web)",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",