感谢阅读。我使用这个问题的方法创建了一个GIF:
Create and and export an animated gif via iOS?
我正在尝试使用看似能够将非JPG / PNG图像保存到相机胶卷的唯一方法ALAssetLibrary
的{{1}}
我将Gif保存到临时目录中,如下所示:
writeImageDataToSavedPhotosAlbum:metadata:completionBlock:
然后访问NSString *exportPath = [NSTemporaryDirectory() stringByAppendingString:@"/animated.gif"];
NSURL *fileURL = [NSURL fileURLWithPath:exportPath isDirectory:NO];
,如:
NSData
创建GIF是因为我能够在NSData * gifData = [NSData dataWithContentsOfFile:fileURL.absoluteString];
中显示它,但是当我尝试保存它时,该方法返回成功(没有错误)但实际上没有保存(返回{ {1}} UIImageView
并且未出现在相机胶卷中。
如何让我的GIF成功保存到相机胶卷?
答案 0 :(得分:11)
**
解决方案01:仅将现有GIF文件保存到相机胶卷
**
据我了解你的问题。您可以生成GIF文件但无法保存并将其查看到相机胶卷。
所以我使用现有的GIF文件附加了一个样本测试。
步骤01。我在应用程序文档目录中复制了一个gif IMG_0009.GIF文件。
步骤02 比使用以下代码加载此文件NSData:
NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil];
NSURL *fileURL = [documentsDirectoryURL URLByAppendingPathComponent:@"IMG_0009.gif"];
NSData *gifData = [NSData dataWithContentsOfFile:[fileURL path]];
步骤03:现在我将文件保存在媒体目录中:
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeImageDataToSavedPhotosAlbum:gifData metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
NSLog(@"Success at %@", [assetURL path] );
}];
资产网址是正确的。现在您可以查看媒体目录。你可以找到保存的gif图像。
玩得开心:)
**
解决方案02:创建并保存GIF到相机胶卷的演示
**
我克隆了一些解决方案,以显示创建和保存GIF文件到Camera Roll。 你可以在github上下载并查看我的fork:
该演示通过拍摄2张或更多图像创建GIF文件并保存在相机胶卷目录
中https://github.com/bllakjakk/Giraffe
要关注的主要代码如下:
[export encodeToFile:tempFile callback:^(NSString * aFile) {
NSLog(@"Path: %@", aFile);
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
NSData *data = [NSData dataWithContentsOfURL:[[NSURL alloc]initFileURLWithPath:aFile]];
[library writeImageDataToSavedPhotosAlbum:data metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
NSLog(@"Success at %@", [assetURL path] );
}];
}];
它使用我在http://jitsik.com/wordpress/?p=208
之前的解决方案中提到的库如何验证:
步骤01:运行演示项目。
步骤02:按照应用程序的指示添加2张图片,然后点击导出。
步骤03:现在检查相机胶卷,你会发现创建的gif。
<强>上:强>
GIF是一种专有格式,因此您需要第三方库来保存它。
答案 1 :(得分:2)
我发现问题是我无法从文件中抓取GIF。我从使用CGImageDestinationCreateWithURL
切换到CGImageDestinationCreateWithData
并使用CFMutableDataRef
来保存Gif数据。我不知道为什么,但是通过writeImageDataToSavedPhotosAlbum
工作来保存到相机。
答案 2 :(得分:1)
这是否已更新为适用于iOS 9,以及ALAssets的弃用?我在PHPhotoLibrary中没有看到类似的调用。
答案 3 :(得分:0)
这是使用PHPhotoLibrary的更新答案,因为ALAssetsLibrary已弃用。
我使用了另一个用户-陈星旺的答案
PHPhotoLibrary save a gif data
NSString *exportPath = [NSTemporaryDirectory() stringByAppendingString:@"/animated.gif"];
NSURL *fileURL = [NSURL fileURLWithPath:exportPath isDirectory:NO];
NSData * gifData = [NSData dataWithContentsOfFile:fileURL.absoluteString];
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetResourceCreationOptions *options = [[PHAssetResourceCreationOptions alloc] init];
[[PHAssetCreationRequest creationRequestForAsset]
addResourceWithType:PHAssetResourceTypePhoto
data:gifData
options:options];
} completionHandler:^(BOOL success, NSError * _Nullable error) {
if (success) {
NSLog(@"image saved!");
} else {
NSLog(@"error saving image - %@", error ? error.localizedDescription : @"");
}
}];
如果您需要从URL下载GIF数据,则可以使用以下方法:
NSData *gifData = [NSData dataWithContentsOfURL:theGIFsURL];