我想获取一个UIImage并输出其100 x 100版本以用作缩略图。我在SO上找到了一些有关如何在Objective-C中执行此操作的答案,但并不迅速,并且不确定从哪里开始。我还找到了链接(https://nshipster.com/image-resizing/#technique-3-creating-a-thumbnail-with-image-io),这表明它不像我希望的那样简单明了。该链接使我希望其中一种方法可以起作用,但是每种方法都引用一个URL参数,这使我感到困惑,因为我以UIImage作为输入开始。
在类似的情况下(用户从手机上传图片),我使用下面的代码从资产创建缩略图,当输入的是UIImage而不是PHAsset时,我正在寻求帮助,以做同样的事情。
func getAssetThumbnail(asset: PHAsset) -> UIImage {
let manager = PHImageManager.default()
let option = PHImageRequestOptions()
var thumbnail = UIImage()
option.isSynchronous = true
manager.requestImage(for: asset, targetSize: CGSize(width: 100, height: 100), contentMode: .aspectFit, options: option, resultHandler: {(result, info)->Void in
thumbnail = result!
})
return thumbnail
}
答案 0 :(得分:0)
测试了代码,对我来说很好用:-(Swift 5.0)
#...
sig { returns(String) }
def first_argument; ""; end
sig { returns(T.nilable(String)) }
def second_argument; end
答案 1 :(得分:0)
为了将来参考,我刚刚遇到了同样的问题,这个线程有一些很好的解决方案:Creating a thumbnail from UIImage using CGImageSourceCreateThumbnailAtIndex
我选择了这个,它在 Swift 5.3 中运行良好:
let uiImage = someUIImage
let options = [
kCGImageSourceCreateThumbnailWithTransform: true,
kCGImageSourceCreateThumbnailFromImageAlways: true,
kCGImageSourceThumbnailMaxPixelSize: 100] as CFDictionary
guard let imageData = uiImage.pngData(),
let imageSource = CGImageSourceCreateWithData(imageData as NSData, nil),
let image = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, options)
else {
return nil
}
return UIImage(cgImage: image)
答案 2 :(得分:0)
iOS 15 向 UIImage 添加了以下测试版 API。
func prepareThumbnail(of: CGSize, completionHandler: (UIImage?) -> Void)
func preparingThumbnail(of: CGSize) -> UIImage?