背景

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

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);
再在相应的位置绘制图片,使图片居中展示。

但是这种方式在系统相册展示的图片就会出现白边间隔,存入的图片和想保存入相册的图片不一致。

iOS - 保存图片至系统相册相关推荐

  1. Android保存图片到系统相册

    先说一下思路,我是这样做的,先保存一张图片到可写路径下,用cocos2d的节点截屏功能,保存之后就可以 保存Bitmap到本地指定路径下 ,然后通过广播,通知系统相册图库刷新数据. 先说如何节点截屏: ...

  2. swift 将图片保存到本地_Swift - 保存图片到系统相册(相机胶卷),并获取存放路径、缩略图...

    (本文代码已升级至Swift3) 有时我们需要把图像(比如:从网络上获取的图片.程序自己生成的图片等)保存到系统相册(照片)中,通常有两种办法:一是使用 UIImageWriteToSavedPhot ...

  3. 微信小程序保存图片到相册;uni-app小程序保存网络图片到相册;小程序保存图片到相册拒绝授权后重新拉起授权;保存图片到系统相册;小程序保存图片测试可以,真机保存图片失败

    文末代码可以直接复制使用,图片修改成你的图片路径即可 一.场景: 小程序点击按钮,保存项目内的静态图片或者微信头像或者后端返回的图片: 二.注意点及思路拆分: –2.1:小程序保存图片功能,必须要有s ...

  4. android 系统相册 多远,【系统相册】Android 保存图片到系统相册

    保存完图片后,可以在内存设备的文件系统相册目录下看到对应图片(以小米手机为例,系统相册的路径为:/storage/emulated/0/DCIM/Camera).但是,使用系统图库无法马上看到该图片, ...

  5. 直播视频app源码,保存图片到系统相册

    直播视频app源码,保存图片到系统相册相关的代码 public static void saveImageToGallery(Context context, Bitmap bmp) {// 首先保存 ...

  6. android 6.0获取图片地址,Android应用开发Android 保存图片到系统相册(三星6.0有效)...

    Android   保存图片到系统相册(三星6.0有效).今天要做一个保存图片到系统图库的功能,自身能力较浅,所以只能搜索了但发现网上的方法有几处bug,所以自己总结一下防止以后忘掉也想和大家分享一下 ...

  7. 微信小程序保存图片到系统相册

    function downloadImage(imageUrl) {   // 下载文件   wx.downloadFile({   url: imageUrl,   success: functio ...

  8. uniapp 微信小程序保存图片到系统相册(包括获取手机相册权限)即拿即用

    目录 1. 代码,即拿即用 2. 介绍使用到的方法 1. uni.getSetting 2. uni.authorize 3. uni.saveImageToPhotosAlbum 4. uni.op ...

  9. iOS中,系统相册的那些事

    写在前面 在手机APP日益增加的前提下,如何更好的提升用户的交互体验似乎成为衡量一个APP重要指标.上述的感悟源于实际工作的需求,就是在APP中添加一个更换用户头像的功能. 也许别人会认为这样一个小功 ...

最新文章

  1. Spring 第二遍 02 spring IOC应用
  2. 如何用笔记本建立wifi热点
  3. 没想到你是这样的直播研发骚年
  4. 强化学习算法Policy Gradient
  5. ansible安装配置及实例
  6. 年终将至,回顾我们一起走过的 2020
  7. jsp工程防止外部注入_防止 jsp被sql注入的五种方法
  8. “精耕细作”桌面云市场的锐捷,重磅发布三擎云桌面
  9. php 连接mssql
  10. 【转】win7 32位安装oracle10g步骤
  11. 使用油猴脚本在网页中插入按键
  12. android网络工程师,网络工程师考试app下载-网络工程师考试 安卓版v3.0.7-PC6安卓网...
  13. 解决问题的能力和个人学习能力总结。
  14. 软考—信息项目管理师(信息化和信息系统二)
  15. 【报告分享】2021年快手母婴行业数据价值报告-磁力引擎(附下载)
  16. CVPR 2022|解耦知识蒸馏!旷视提出DKD:让Hinton在7年前提出的方法重回SOTA行列!...
  17. [置顶] 程序员面试之道(《程序员面试笔试宝典》)之程序员如何保持身心健康?
  18. Java 中文转拼音/汉字转拼音, 中文转五笔/汉字转五笔, 下载字典!
  19. SCA连载GDPR罚单 | 瑞典高中人脸识别被罚,为我们敲响了哪些警钟?
  20. 射频电容 cog npo 等等

热门文章

  1. GDPU c语言 天码行空 4 plus
  2. C语言的学习第一天——谭浩强C程序设计第五版
  3. 中国街头骗术大全(转贴)
  4. C#语言中TransactionScope类的使用
  5. 高中数学基础-1.4.1全称量词与存在量词(一)量词(新)
  6. python基本数据类型2
  7. 【转】Android中保持Service的存活
  8. minio 简介、中文文档、中英对照文档 下载
  9. 糕点界的瑞幸?饿了么口碑要帮幸福西饼5年建1000家智慧门店
  10. 管理系统无法运行Java_无法使用32位版本的DISM为正在运行的64位操作系统服务