iOS - 保存图片至系统相册

背景

本文而言,保存图片至相册功能相信基本上在开发中都能遇到,但是你在保存你原图大小至系统相册时,系统会主动的进行你图片的缩放和拉伸来适应它图片的展示,好吧,你老大,按你的来,当你按照它屏幕大小设置图片大小时,它还是会冷不及防的给你适应。 主要通过两部分介绍。一是简单介绍保存图片至相册的方法;二是为了讲解iOS保存图片至相册时系统相册对图片展示问题的解决。

保存图像至相册方法

iOS 目前有三种方法将图片保存至相册:

  1. UIImageWriteToSavedPhotosAlbum()
  2. AssetsLibrary框架
  3. Photos框架

UIImageWriteToSavedPhotosAlbum()

最简单的实现方式,运用c语言函数:
UIImageWriteToSavedPhotosAlbum(UIImage *image, __nullable id completionTarget, __nullable SEL completionSelector, void * __nullable contextInfo)
简单介绍下函数入参:

  1. image: 保存至相册的图片;
  2. completionTarget: 写入图片至相册完成后接收回调对象;
  3. completionSelector: 写入图片至相册完成后所执行回调方法;
  4. contextInfo: 写入完成后原封不动地传回到回调方法的contextInfo参数中;
    UIImageWriteToSavedPhotosAlbum()实现

AssetsLibrary框架 (iOS 4.0被引入、iOS 9.0被废弃)

1.导入#import <AssetsLibrary/AssetsLibrary.h>库
2.调用 - (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock

简单介绍下函数入参:

  1. imageRef: 保存至相册的图片的CGImageRef对象;
  2. metadata: 图片属性;
  3. completionBlock: 写入图片至相册完成后所执行回调方法;
    在这里插入图片描述

Photos框架

1.导入#import <Photos/Photos.h>库
2.创建PHPhotoLibrary实例对象
3.- (void)performChanges:(dispatch_block_t)changeBlock completionHandler:(nullable void(^)(BOOL success, NSError *__nullable error))completionHandler //创建一个串行队列进行相册操作。

主要涉及PHPhotoLibrary 、PHAssetChangeRequest类,PHPhotoLibrary类创建一个串行队列,PHAssetChangeRequest类传入一个图片对象实现保存至相册
在这里插入图片描述

相册图片展示问题

由上三种方式进行图片保存后,原本的图片大小保存至相册后可能并不是你想要展示的那样,因为系统相册会对图片大小根据屏幕宽高进行等比缩放拉伸来展示,所以在保存至相册后展示的图片大小会出现和原图片大小不一致的情况。面对这样的情况,我们一般会自己进行图片缩放,不将缩放交由系统。
图片缩放
原图存入相册
如上图原图存入相册,系统会自动拉伸出现展示不全问题(如下):
在这里插入图片描述

图片缩放

原图保存和想象的并不太一样,那就自己进行缩放,让系统没得缩。
通过依照屏幕大小创建画布
UIGraphicsBeginImageContext([UIScreen mainScreen].bounds.size);
再在相应的位置绘制图片,使图片居中展示。
在这里插入图片描述
但是这种方式在系统相册展示的图片就会出现白边间隔,存入的图片和想保存入相册的图片不一致。
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值