[转]iOS:批量导入图片和视频到模拟器的相册
IOS开发中我们经常会用到模拟器调试,模拟器有个主要的好处就是程序启动块,最重要的是如果没有证书的话,我们就只能在模拟器上调试了。使用模拟器调试时我们可能碰到需要从系统相册选择图片的情况,特别是做图片处理类相关的程序时,更是经常用到。
初始化情况下模拟器中的相册中是空的,所以要想选择,我们就得先导入一些图片。通常的做法是将图片直接拖拽到模拟器上,然后模拟器就会用safari打开,这个时候我们再长按图片就会弹出保存到系统相册的菜单了,这样一个完整的图片保存流程就完成了。但是这中方法有一个明显的缺点就是效率太低,试想你要做图片处理的话肯定得测试各种尺寸,各种比例的图片,这样一个个导入无疑是对程序员的一种摧残。
那么如何才能批量的导入图片呢?
我最开始的时候的想法是找到模拟器存放的目录,然后定位到照片文件夹下面,直接把图片拷贝进去不就搞定了。于是打开finder寻找到了模拟器的安装路径,比如6.1的模拟器的路径就是: /Users/maple/Library/Application Support/iPhone Simulator/6.1/
我们使用命令行进入这个目录,并找到照片文件夹的路径: /Users/maple/Library/Application Support/iPhone Simulator/6.1/Media/DCIM,然后将照片拷贝进去。本以为大功告成,结果重启了模拟器以后发现系统相册较之前毫无变化,想一想应该只因为我们只把图片拷贝进去了,却没有更新系统相册对应的数据库。如果能在拷贝图片的同时,更新系统相册对应的数据库,我猜应该就能搞定了,只是代价比较大,所以只好放弃。
只好换别的方法了,记得以前做上一个项目的时候好像有一个API是可以保存图片到系统相册的,于是找到这个API: UIImageWriteToSavedPhotosAlbum。想着如果我建一个工程,把要加的图片加到工程里面,然后在程序中通过遍历这些图片,一次调用UIImageWriteToSavedPhotosAlbum这个方法,所以的图片不就全部导入到系统相册了吗?
说做就做,先写了一个简单的函数试了一下,的确可以达到目的,然后继续完善思路,添加了监测拷贝进度的功能,做了一个简单的进度界面。
关键的保存图片的函数片段如下:

- (void)saveMediaToCameraRoll
{
// // traverse the main bundle to find out all image files
NSMutableArray *picArray = [NSMutableArray arrayWithCapacity:3]; NSArray *jpgFiles = [[NSBundle mainBundle] pathsForResourcesOfType:@"jpg" inDirectory:nil];
[picArray addObjectsFromArray:jpgFiles]; NSArray *pngArray = [[NSBundle mainBundle] pathsForResourcesOfType:@"png" inDirectory:nil]; // exclude launch image of this project
NSMutableArray *picExcludeDefault = [NSMutableArray arrayWithArray:pngArray];
for (NSString *path in pngArray) {
NSArray *pathCom = [path pathComponents];
if ([pathCom containsObject:@"Default-568h@2x.png"]
|| [pathCom containsObject:@"Default.png"]
|| [pathCom containsObject:@"Default@2x.png"]) {
[picExcludeDefault removeObject:path];
}
}
pngArray = picExcludeDefault;
[picArray addObjectsFromArray:pngArray]; // traverse the main bundle to find out all mov files
NSMutableArray *videoArray = [NSMutableArray arrayWithCapacity:3]; NSArray *movs = [[NSBundle mainBundle] pathsForResourcesOfType:@"mov" inDirectory:nil];
[videoArray addObjectsFromArray:movs]; _mediaItemCount = picArray.count + videoArray.count; if (delegate && [delegate respondsToSelector:@selector(saveToUtilStartCopy:)]) {
[delegate saveToUtilStartCopy:_mediaItemCount];
} // save pic to camera roll
for (id item in picArray) {
UIImage *img = [[UIImage alloc] initWithContentsOfFile:item]; // Note:save to camera roll is async, so the later item may copy complete than previous item
UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);
[img release];
} // save video to camera roll
for (id item in videoArray) {
if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(item)) { // Note:save to camera roll is async, so the later item may copy complete than previous item
UISaveVideoAtPathToSavedPhotosAlbum(item, self, @selector(video:didFinishSavingWithError:contextInfo:), NULL);
}
else {
[self updateProcessWithError:[NSError errorWithDomain:@"copy video error" code:-1 userInfo:nil]];
}
}
}

忽略界面更新回调相关的逻辑,程序的主要流程如下:
1)找到当前程序包中所有的图片文件,注意这块儿要排除掉工程自带的图片如Default.png等;
2)对找到的所有图片文件调用保存到系统相册的函数。
经过测试本程序可以实现批量导入图片到系统相册的功能,于是想着更进一步视频是否也可以批量导入呢?经过查找发现也有一个API: UISaveVideoAtPathToSavedPhotosAlbum,然后顺便添加了批量导入视频的功能,经过测试可以正常导入。
整个工程的代码在github上,地址: https://github.com/smileEvday/SvSaveToCameraRoll
(来自:http://www.cnblogs.com/smileEvday/archive/2013/04/16/SaveToCameraRoll.html)
[转]iOS:批量导入图片和视频到模拟器的相册的更多相关文章
- opencv学习之路(3)、批量读取图片、视频分解、视频合成
一.批量有序读取图片 #include<opencv2/opencv.hpp> using namespace cv; void main() { //批量读取图片(有序) ]; ]; M ...
- C# 自动批量导入图片到数据库中
using Model; using System; using System.Collections.Generic; using System.Data; using System.Data.Sq ...
- ORACLE批量导入图片到BLOB字段
要插入图片的表不是固定的,而且是批量插入很多张,还要考虑到因为图片的文件名错误,修改后要再次插入,此时应避免已经插入的重复执行操作, 浪费时间. 所以就选择先用一张临时表来暂时保存从文件系统读取的照片 ...
- 批量导入图片到word并添加文件名
Sub InsertPic() Dim myfile As FileDialog Set myfile = Application.FileDialog(msoFileDialogFilePicker ...
- VBA批量导入图片到多Word文档并加标题(会飞的鱼)
感谢会飞的鱼大牛~ Public fp$, obmapp As Object Sub kk() 文件夹浏览器 Application.ScreenUpdating = False Set fso = ...
- 基于.NetCore开发博客项目 StarBlog - (9) 图片批量导入
系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...
- 【VBA】批量插入图片
解决如下问题: 需要批量导入图片到Excel 图片放在一个文件夹中 图片有严格的顺序关系,即按照:共通名_编号的方式命名. 图片格式统一,即均为同一格式. 有两种方式可以插入图片到Excel中,其一为 ...
- [转]解决Magento批量导入带图片的商品的问题
本文转自:http://www.phpstudio.info/show-121-791-1.html 一般来说,Magento后台管理里的CSV批量导入,可以解决我们商品批量上传的大部分问题,我们只要 ...
- iOS - 选取相册中iCloud云上图片和视频的处理
关于iOS选取相册中iCloud云上图片和视频 推荐看:TZImagePickerController的源码,这个是一个非常靠谱的相册选择图片视频的库 .当然也可以自己写 如下遇到的问题 工作原因, ...
随机推荐
- 搭建双系统win10+ubuntu17.10
0. 序言 这里采用先装win10,再装ubuntu的顺序.这样可以避免后面系统启动项设置的问题.都采用UEFI引导方式,且使用usb2.0的u盘来引导(3.0的话,要准备好3.0的驱动).另外注意的 ...
- Java核心技术-集合
在实现方法时,选择不同的数据结构会导致其实现风格以及性能存在着很大的差异,例如: 需要快速地搜索成千上万个有序的数据项吗?需要快速地在有序的序列中插入和删除元素吗?需要建立键与值之间的关联吗? 1 J ...
- TensorMask
原文地址:https://arxiv.org/pdf/1903.12174.pdf 论文阅读:http://www.zhenzhujue.cn/article-36456-1.html https:/ ...
- php 共享内存学习(APC扩展)
问题:希望可以在进程间共享变量,为共享数据提供快速访问 解决方案:使用APC扩展的数据存储功能 (cli模式下没有作用) //获取原来的值 $population = apc_fetch('popul ...
- [SoapUI]怎样运用Schema通过*.xsd文件来验证response对应的xml文件
添加Groovy Script脚本对Test Step进行验证 脚本如下(已经运行通过): import javax.xml.XMLConstants import javax.xml.transfo ...
- UI / UX设计师如何玩转用户心理学原理?
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 众所周知,心理学在APP的用户体验设计中起着非常重要的作用.通过了解我们的设计是如何被感知的,我们可 ...
- 479. Largest Palindrome Product
class Solution { public: int largestPalindrome(int n) { vector<,,,,,,,}; ]; } }; 这里的穷举法,你不得不服
- C# Redis Server分布式缓存编程(一)(转)
出处:http://www.cnblogs.com/davidgu/p/3262571.html 这篇文章我将介绍如果用最简洁的方式配置Redis Server, 以及如何使用C#和它交互编程 一. ...
- LinUX系统ThinkPHP5链接MsSQL数据库的pdo_dblib扩展
LinUX(centOS6.8)系统ThinkPHP5链接MsSQL数据库的pdo_dblib扩展第一步 下载并安装freetds-current.tar.gz下载地址如下ftp://ftp.free ...
- iPhone4 8.3 系统下字体下方去除下划线
NSMutableAttributedString *title = [[NSMutableAttributedString alloc] initWithString:@"先去看看 ...