From 7442c742cf0df1da90eeed4e1138086e74252ca1 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Fri, 28 Feb 2025 12:48:14 +0000 Subject: [PATCH 1/4] Send photos from the library as jpeg instead of heic --- .../Composer/PhotoAttachmentPickerView.swift | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/PhotoAttachmentPickerView.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/PhotoAttachmentPickerView.swift index 79a9665a2..d04409eef 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/PhotoAttachmentPickerView.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/PhotoAttachmentPickerView.swift @@ -102,7 +102,7 @@ public struct PhotoAttachmentCell: View { .allowsHitTesting(true) .onTapGesture { withAnimation { - if let assetURL = assetURL { + if let assetURL = assetJpgURL() { onImageTap( AddedAsset( image: image, @@ -193,4 +193,13 @@ public struct PhotoAttachmentCell: View { } } } + + /// The original photo is usually in HEIC format. + /// This makes sure that the photo is converted to JPG. + /// This way it is more compatible with other platforms. + private func assetJpgURL() -> URL? { + guard let assetURL = assetURL else { return nil } + guard let assetData = try? Data(contentsOf: assetURL) else { return nil } + return try? UIImage(data: assetData)?.temporaryLocalFileUrl() + } } From 91df05df1136ffcd4d10372dacd3f5a5a174af53 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Fri, 28 Feb 2025 12:54:44 +0000 Subject: [PATCH 2/4] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 738922fd3..284930e6b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). # Upcoming -### 🔄 Changed +### 🐞 Fixed +- Fix uploading photos in HEIC without converting them to JPEG [#767](https://github.com/GetStream/stream-chat-swiftui/pull/767) # [4.73.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.73.0) _February 28, 2025_ From a5cc42666452a804df7ff81e15eda26b1af237fb Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Fri, 28 Feb 2025 12:55:48 +0000 Subject: [PATCH 3/4] Update CHANGELOG.md --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 284930e6b..b0e9d7bec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,8 +3,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). # Upcoming -### 🐞 Fixed -- Fix uploading photos in HEIC without converting them to JPEG [#767](https://github.com/GetStream/stream-chat-swiftui/pull/767) +### 🔄 Changed +- Uploading a HEIC photo from the library is now converted to JPEG for better compatibility [#767](https://github.com/GetStream/stream-chat-swiftui/pull/767) # [4.73.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.73.0) _February 28, 2025_ From 5c5b4a56290b9418ec6e3bbaa82383c0f42a545d Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Fri, 28 Feb 2025 13:54:17 +0000 Subject: [PATCH 4/4] Improve the name of the function --- .../ChatChannel/Composer/ImagePickerView.swift | 2 +- .../ChatChannel/Composer/PhotoAttachmentPickerView.swift | 2 +- Sources/StreamChatSwiftUI/Utils/Common/UIImage+Extensions.swift | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/ImagePickerView.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/ImagePickerView.swift index 0d531b8ce..f20adb592 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/ImagePickerView.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/ImagePickerView.swift @@ -55,7 +55,7 @@ final class ImagePickerCoordinator: NSObject, UIImagePickerControllerDelegate, U didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any] ) { if let uiImage = info[.originalImage] as? UIImage, - let imageURL = try? uiImage.temporaryLocalFileUrl() { + let imageURL = try? uiImage.saveAsJpgToTemporaryUrl() { let addedImage = AddedAsset( image: uiImage, id: UUID().uuidString, diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/PhotoAttachmentPickerView.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/PhotoAttachmentPickerView.swift index d04409eef..af4bec469 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/PhotoAttachmentPickerView.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/PhotoAttachmentPickerView.swift @@ -200,6 +200,6 @@ public struct PhotoAttachmentCell: View { private func assetJpgURL() -> URL? { guard let assetURL = assetURL else { return nil } guard let assetData = try? Data(contentsOf: assetURL) else { return nil } - return try? UIImage(data: assetData)?.temporaryLocalFileUrl() + return try? UIImage(data: assetData)?.saveAsJpgToTemporaryUrl() } } diff --git a/Sources/StreamChatSwiftUI/Utils/Common/UIImage+Extensions.swift b/Sources/StreamChatSwiftUI/Utils/Common/UIImage+Extensions.swift index 8e7f7c9c6..30a0eb2ef 100644 --- a/Sources/StreamChatSwiftUI/Utils/Common/UIImage+Extensions.swift +++ b/Sources/StreamChatSwiftUI/Utils/Common/UIImage+Extensions.swift @@ -42,7 +42,7 @@ extension UIImage { } extension UIImage { - func temporaryLocalFileUrl() throws -> URL? { + func saveAsJpgToTemporaryUrl() throws -> URL? { guard let imageData = jpegData(compressionQuality: 1.0) else { return nil } let imageName = "\(UUID().uuidString).jpg" let documentDirectory = NSTemporaryDirectory()