IOS - gif文件保存为jpeg

时间:2014-10-20 16:49:02

标签: ios image gif

我使用AFNetworking 2.0从网络下载了gif图像,然后使用ALAssetsLibrary将其保存到相机胶卷

[assetsLibrary writeImageToSavedPhotosAlbum:[responseObject CGImage] orientation:(ALAssetOrientation)[responseObject imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error)
{
    if (error)
    {
        [App showAlertWithTitle:@"Error" message:@"Save message failed"];
    }
    else
    {
        [App showAlertWithTitle:@"Success" message:@"Saved success"];
    }
}];

然后我尝试使用UIImagePickerViewController从相机中检索此图像,但我检索到的图像不是GIF图像,而是带参考网址的jpeg图像:

UIImagePickerControllerReferenceURL = "assets-library://asset/asset.JPG?id=2E7C87E4-5853-4946-B86B-CC8AAF094307&ext=JPG";

我不知道错误是ALAssetsLibrary还是UIImagePickerViewController以及如何超越

2 个答案:

答案 0 :(得分:0)

照片库不支持GIF。

它支持PHAssetMediaTypeImage(JPG),PHAssetMediaTypeVideo(MOV)或PHAssetMediaTypeAudio(可能是M4A,此处不确定)。

https://developer.apple.com/library/ios/documentation/Photos/Reference/Photos_Constants/index.html#//apple_ref/c/tdef/PHAssetMediaSubtype

答案 1 :(得分:-1)

writeImageToSavedPhotosAlbum:方法仅将静态图像保存为JPEG,新的Photos方法也是如此。但是,保存其他格式的方法,包括(是的!)GIF。

你不需要搞乱CGImageRefs - 只需抓住GIF数据然后使用writeImageDataToSavedPhotosAlbum:metadata:completionBlock:方法保存它。像这样:

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
NSData *data = [NSData dataWithContentsOfURL:
    [NSURL URLWithString:@"http://somewhere/something.gif"]]];  
[library writeImageDataToSavedPhotosAlbum:data 
    metadata:nil 
    completionBlock:^(NSURL *assetURL, NSError *error) {
      if (error) {
        [App showAlertWithTitle:@"Error" message:@"Save message failed"];
      } else {
        [App showAlertWithTitle:@"Success" message:@"Saved success"];
      }
    }];

请参阅this answer

如果你想生成一个GIF,它有点复杂,但只需保存一个即可。