iOS截图预览UIImage尺寸异常,Action Extension缩放问题求助
问题原因
- 点击截图预览启动Action Extension时,iOS为了加快扩展启动速度,传递的是低分辨率缩略图(逻辑尺寸393x852,scale=3,对应实际像素1179x2556),而非原始截图的全分辨率数据;从相册选择时,系统会直接传递原始图片文件,因此能获取到预期尺寸。
- 直接放大缩略图导致扩展崩溃,是因为放大后的图片内存占用剧增,超出了Action Extension的内存限制,被系统强制回收。
解决方案
1. 获取原始图片的文件URL加载高清图
不要直接使用inputItems中的UIImage,而是从NSItemProvider获取原始图片的URL,再加载完整数据:
import MobileCoreServices guard let extensionItem = extensionContext?.inputItems.first as? NSExtensionItem, let itemProvider = extensionItem.attachments?.first as? NSItemProvider, itemProvider.hasItemConformingToTypeIdentifier(kUTTypeImage as String) else { return } itemProvider.loadItem(forTypeIdentifier: kUTTypeImage as String) { (data, error) in guard let imageURL = data as? URL, let imageData = try? Data(contentsOf: imageURL), let originalImage = UIImage(data: imageData) else { return } // 此时originalImage为原始分辨率(1179x2556,scale=1) self.handleOriginalImage(originalImage) }
2. 避免拉伸缩略图,优先用原始图处理
如果需要先显示预览,可以用缩略图临时展示,但后续处理必须基于原始图片文件,不要对缩略图进行放大——拉伸后的图片不仅模糊,还会浪费内存。
3. 优化内存占用防止崩溃
处理大尺寸图片时,用CGImageSource按需加载,避免一次性占用过多内存:
func loadOptimizedImage(from url: URL, targetSize: CGSize) -> UIImage? { guard let imageSource = CGImageSourceCreateWithURL(url as CFURL, nil) else { return nil } let options: [CFString: Any] = [ kCGImageSourceShouldCache: false, kCGImageSourceCreateThumbnailFromImageAlways: true, kCGImageSourceThumbnailMaxPixelSize: max(targetSize.width, targetSize.height) ] guard let cgImage = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, options as CFDictionary) else { return nil } return UIImage(cgImage: cgImage) }
调用时可传入目标尺寸,既能获取清晰的缩放图,又能控制内存使用。
4. 确认扩展权限配置
检查Info.plist中是否正确配置了图片支持:
<key>NSExtension</key> <dict> <key>NSExtensionAttributes</key> <dict> <key>NSExtensionActivationRule</key> <dict> <key>NSExtensionActivationSupportsImageWithMaxCount</key> <integer>1</integer> </dict> </dict> <key>NSExtensionMainStoryboard</key> <string>MainInterface</string> <key>NSExtensionPointIdentifier</key> <string>com.apple.ui-services</string> </dict>
内容的提问来源于stack exchange,提问作者Richard Witherspoon
相关产品推荐
相关产品推荐

