From ef6309c08f95390333e0aba17cac5761138f6059 Mon Sep 17 00:00:00 2001 From: jack Date: Thu, 25 Sep 2025 13:14:03 +0200 Subject: [PATCH] Strip metadata in mac image encoding --- bitchat/Features/media/ImageUtils.swift | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/bitchat/Features/media/ImageUtils.swift b/bitchat/Features/media/ImageUtils.swift index 470d23dd..963fec4e 100644 --- a/bitchat/Features/media/ImageUtils.swift +++ b/bitchat/Features/media/ImageUtils.swift @@ -3,6 +3,8 @@ import Foundation import UIKit #else import AppKit +import ImageIO +import UniformTypeIdentifiers #endif enum ImageUtilsError: Error { @@ -52,11 +54,24 @@ enum ImageUtils { let scaled = scaledImage(image, maxDimension: maxDimension) guard let tiffData = scaled.tiffRepresentation, let bitmap = NSBitmapImageRep(data: tiffData), - let jpegData = bitmap.representation(using: .jpeg, properties: [.compressionFactor: compressionQuality]) else { + let cgImage = bitmap.cgImage else { throw ImageUtilsError.encodingFailed } let outputURL = try makeOutputURL() - try jpegData.write(to: outputURL, options: .atomic) + guard let destination = CGImageDestinationCreateWithURL(outputURL as CFURL, UTType.jpeg.identifier as CFString, 1, nil) else { + throw ImageUtilsError.encodingFailed + } + let options: [CFString: Any] = [ + kCGImageDestinationLossyCompressionQuality: compressionQuality, + kCGImagePropertyExifDictionary: [:], + kCGImagePropertyTIFFDictionary: [:], + kCGImagePropertyIPTCDictionary: [:], + kCGImagePropertyOrientation: 1 + ] + CGImageDestinationAddImage(destination, cgImage, options as CFDictionary) + guard CGImageDestinationFinalize(destination) else { + throw ImageUtilsError.encodingFailed + } return outputURL }