Spa*_*Dog 5 uiimage ios cgimagesource cgimageref
我想使用该函数CGImageSourceCreateThumbnailAtIndex从一个创建一个缩略图UIImage.我所拥有的就是它UIImage自己.图像是a上的快照UIView.
请,我不想使用任何其他方法来创建缩略图,只是使用缩略图CGImageSourceCreateThumbnailAtIndex,因为我想将其性能与我已有的其他方法进行比较.
说,这是我到目前为止的代码.
我UIImage用这段代码创建了一个类别:
- (UIImage *)createSquaredThumbnailWithWidth:(NSInteger)width {
CFDictionaryRef options = (__bridge CFDictionaryRef) @{
(id) kCGImageSourceCreateThumbnailWithTransform : @YES,
(id) kCGImageSourceCreateThumbnailFromImageAlways : @YES,
(id) kCGImageSourceThumbnailMaxPixelSize : @(width)
};
CGImageRef scaledImageRef = CGImageSourceCreateThumbnailAtIndex(????, 0, options);
UIImage* scaled = [UIImage imageWithCGImage:scaledImageRef];
CGImageRelease(scaledImageRef);
return scaled;
}
Run Code Online (Sandbox Code Playgroud)
我的问题在于这一行:
CGImageRef scaledImageRef = CGImageSourceCreateThumbnailAtIndex(????, 0, options);
Run Code Online (Sandbox Code Playgroud)
这个函数的第一个参数需要一个CGImageSourceRef,但就像我说的,我只是有一个UIImage,那个图像是在内存上,而不是在磁盘上,我不想将它保存到磁盘上,或者性能会下降.
我怎么CGImageSourceRef从UIImage内存中得到一个?
Iva*_*lov 20
Swift 4代码
let imageData = UIImagePNGRepresentation(image)!
let options = [
kCGImageSourceCreateThumbnailWithTransform: true,
kCGImageSourceCreateThumbnailFromImageAlways: true,
kCGImageSourceThumbnailMaxPixelSize: 300] as CFDictionary
let source = CGImageSourceCreateWithData(imageData, nil)!
let imageReference = CGImageSourceCreateThumbnailAtIndex(source, 0, options)!
let thumbnail = UIImage(cgImage: imageReference)
Run Code Online (Sandbox Code Playgroud)
bra*_*imm 12
Swift 5.1 扩展
基于伊万的回答
extension UIImage {
func getThumbnail() -> UIImage? {
guard let imageData = self.pngData() else { return nil }
let options = [
kCGImageSourceCreateThumbnailWithTransform: true,
kCGImageSourceCreateThumbnailFromImageAlways: true,
kCGImageSourceThumbnailMaxPixelSize: 300] as CFDictionary
guard let source = CGImageSourceCreateWithData(imageData as CFData, nil) else { return nil }
guard let imageReference = CGImageSourceCreateThumbnailAtIndex(source, 0, options) else { return nil }
return UIImage(cgImage: imageReference)
}
}
Run Code Online (Sandbox Code Playgroud)
Nir*_*v D 10
您是否尝试CGImageSourceCreateWithData过CFDataRef像这样使用和传递图像数据.
NSData *imageData = UIImagePNGRepresentation(image);
CGImageSourceRef src = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL);
CFDictionaryRef options = (__bridge CFDictionaryRef) @{
(id) kCGImageSourceCreateThumbnailWithTransform : @YES,
(id) kCGImageSourceCreateThumbnailFromImageAlways : @YES,
(id) kCGImageSourceThumbnailMaxPixelSize : @(width)
};
CGImageRef scaledImageRef = CGImageSourceCreateThumbnailAtIndex(src, 0, options);
UIImage *scaled = [UIImage imageWithCGImage:scaledImageRef];
CGImageRelease(scaledImageRef);
return scaled;
Run Code Online (Sandbox Code Playgroud)
注意:如果您有URL图像,则可以CGImageSourceRef使用创建CGImageSourceCreateWithURL.
CGImageSourceRef src = CGImageSourceCreateWithURL((__bridge CFURLRef)(imageFileURL), NULL);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6529 次 |
| 最近记录: |