import UIKit import ImageIO /// 图片降采样 + JPEG 压缩(头像/反馈截图上传前)。用 ImageIO 流式缩略,避免大图整张解进内存。 enum ImageDownsampler { static func jpeg(_ data: Data, maxDimension: CGFloat = 1024, quality: CGFloat = 0.8) -> Data? { let srcOpts: [CFString: Any] = [kCGImageSourceShouldCache: false] guard let src = CGImageSourceCreateWithData(data as CFData, srcOpts as CFDictionary) else { return UIImage(data: data)?.jpegData(compressionQuality: quality) } let thumbOpts: [CFString: Any] = [ kCGImageSourceCreateThumbnailFromImageAlways: true, kCGImageSourceCreateThumbnailWithTransform: true, // 按 EXIF 自动旋转 kCGImageSourceThumbnailMaxPixelSize: maxDimension, ] guard let cg = CGImageSourceCreateThumbnailAtIndex(src, 0, thumbOpts as CFDictionary) else { return UIImage(data: data)?.jpegData(compressionQuality: quality) } return UIImage(cgImage: cg).jpegData(compressionQuality: quality) } }