保存gif图到相册和从相册获取gif图片

最近项目中用需要实现保存Gif 图到本地并可以分享.自己研究几天做出了,现在和大家分享一下吧

就是一个简单的demo,希望能够给有需要的人有一点帮助吧。写的不好,勿喷。

主要思路来自 ibireme 大神的博客 iOS 处理图片的一些小 Tip

如何把 GIF 动图保存到相册?

iOS 的相册是支持保存 GIF 和 APNG 动图的,只是不能直接播放。用 [ALAssetsLibrary writeImageDataToSavedPhotosAlbum:metadata:completionBlock] 可以直接把 APNG、GIF 的数据写入相册。如果图省事直接用 UIImageWriteToSavedPhotosAlbum() 写相册,那么图像会被强制转码为 PNG。

我这里用的是 ibireme的 YYImage
其实你项目中使用的是SDWebImage 直接使用 imageView sd_setImageWithURL: 即可显示Gif图, SDWebImage已经写了 UIImage+GIF分类

保存图片

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://up.toumiao.net/uploads/allimg/201509/29-090547_613.gif"]];

//把Image以data保存到相册
ALAssetsLibrary *assets = [[ALAssetsLibrary alloc]init];
[assets writeImageDataToSavedPhotosAlbum:data metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {

}];

从相册获取Gif图

UIImagePickerController *pickCtrl = [[UIImagePickerController alloc]init];
//设置资源类型
pickCtrl.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
pickCtrl.delegate = self;

[self presentViewController:pickCtrl animated:YES completion:nil];

获取数据

NSURL *imageURL = [info valueForKey:UIImagePickerControllerReferenceURL];
__weak typeof(self) weakSelf = self;
ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init];
[assetslibrary assetForURL:imageURL resultBlock:^(ALAsset *asset) {
    ALAssetRepresentation *rep = [asset defaultRepresentation];
    Byte *buffer = (Byte*)malloc((unsigned long)rep.size);
    NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:((unsigned long)rep.size) error:nil];
    NSData *data = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES];
    //********  获取到照片的data,在这 里进行上传等操作
    YYImage *image = [YYImage imageWithData:data];
    weakSelf.imageView.image = image;

} failureBlock:nil];