我需要检查图像是动画还是普通图像。 iOS中有任何方法可以检查吗?
我认为带有gif扩展名的文件可以是静态图像或动画图像。
如何查看动画或静止图像?
答案 0 :(得分:1)
以下代码段可能对您有帮助。
基本上,它使用CGImageSourceGetCount来获取gif文件的图像数。然后,它取决于进行图像操作或动画操作的计数。
CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL);
size_t count = CGImageSourceGetCount(source);
UIImage *animatedImage;
if (count <= 1) {
animatedImage = [[UIImage alloc] initWithData:data];
}
else {
NSMutableArray *images = [NSMutableArray array];
NSTimeInterval duration = 0.0f;
for (size_t i = 0; i < count; i++) {
CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL);
....
}
}
来自https://developer.android.com/reference/android/util/Range.html
的代码答案 1 :(得分:1)
对于仍然来这里寻找Swift答案的任何人。只是要获取图像是否为动画gif,这是我能想到的最简单的方法。 在 Swift 4 上运行良好。对于Swift 4.2,对委托方法进行了几处更改,但没什么大不了的。
仅在IOS 11+上有效,如果需要9/10的支持,请参见下文。
func isAnimatedImage(_ imageUrl: URL) -> Bool {
if let data = try? Data(contentsOf: imageUrl),
let source = CGImageSourceCreateWithData(imageData as CFData, nil) {
let count = CGImageSourceGetCount(source)
return count > 1
}
return false
}
就我而言,我是从UIImagePickerController获取图像
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: Any]) {
if let imageURL = info[UIImagePickerControllerImageURL] as? URL {
let isImageAnimated = isAnimatedImage(imageURL)
print("isAnimated: \(isImageAnimated)")
}
picker.dismiss(animated: true, completion: nil)
}
IOS 9和10
对于iOS 9和10,由于它是iOS 11的新功能,因此无法获取UIImagePickerControllerImageURL
,因此我们需要使用照片库来获取数据。
导入照片库在顶部
import Photos
添加正确的代码以获取数据
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: Any]) {
if let imageUrl = info[UIImagePickerControllerReferenceURL] as? URL {
let asset = PHAsset.fetchAssets(withALAssetURLs: [imageUrl], options: nil)
if let image = asset.firstObject {
PHImageManager.default().requestImageData(for: image, options: nil) { (imageData, _, _, _) in
let isImageAnimated = isAnimatedImage(imageData)
print("isAnimated: \(isImageAnimated)")
}
}
}
picker.dismiss(animated: true, completion: nil)
}
func isAnimatedImage(_ imageData: Data) -> Bool {
if let source = CGImageSourceCreateWithData(imageData as CFData, nil) {
let count = CGImageSourceGetCount(source)
return count > 1
}
return false
}
答案 2 :(得分:-1)
这确实是可能的,但您可以通过扩展NSData类来创建自己的方法。
以下是获取图片扩展程序的详细信息:Detail