From d55c6ed506afe4ea9b7e518c54e9a6a5bfbf5ddd Mon Sep 17 00:00:00 2001 From: Shreejan Pandit Date: Mon, 1 Jun 2026 16:01:51 +0545 Subject: [PATCH] fix(ios): convert gallery HEIC/HEIF to JPEG for WebView compatibility Gallery picker copied HEIC as-is while camera capture already saves JPEG. WKWebView cannot display HEIC in img elements. Convert only heic/heif extensions after copy; other formats unchanged. --- resources/ios/CameraFunctions.swift | 35 ++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/resources/ios/CameraFunctions.swift b/resources/ios/CameraFunctions.swift index 84a2666..b973717 100644 --- a/resources/ios/CameraFunctions.swift +++ b/resources/ios/CameraFunctions.swift @@ -661,10 +661,35 @@ extension CameraGalleryManager: PHPickerViewControllerDelegate { try fileManager.copyItem(at: url, to: destinationURL) + var finalURL = destinationURL + var finalExtension = fileExtension + + if type == "image" { + let lowerExt = fileExtension.lowercased() + + // HEIC/HEIF cannot be shown in WKWebView; normalize to JPEG like camera capture. + if lowerExt == "heic" || lowerExt == "heif" { + if let image = UIImage(contentsOfFile: destinationURL.path), + let jpegData = image.jpegData(compressionQuality: 0.9) { + let jpegName = "gallery_selected_\(timestamp)_\(index).jpg" + let jpegURL = galleryDir.appendingPathComponent(jpegName) + + if fileManager.fileExists(atPath: jpegURL.path) { + try? fileManager.removeItem(at: jpegURL) + } + + try jpegData.write(to: jpegURL) + try? fileManager.removeItem(at: destinationURL) + finalURL = jpegURL + finalExtension = "jpg" + } + } + } + let fileInfo: [String: Any] = [ - "path": destinationURL.path, - "mimeType": getMimeType(for: fileExtension), - "extension": fileExtension, + "path": finalURL.path, + "mimeType": getMimeType(for: finalExtension), + "extension": finalExtension, "type": type ] @@ -685,6 +710,10 @@ extension CameraGalleryManager: PHPickerViewControllerDelegate { return "image/gif" case "webp": return "image/webp" + case "heic": + return "image/heic" + case "heif": + return "image/heif" case "mp4": return "video/mp4" case "mov":