[转]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:@"[email protected]"]
            || [pathCom containsObject:@"Default.png"]
            || [pathCom containsObject:@"[email protected]"]) {
            [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

时间: 2024-10-19 14:02:36

[转]iOS:批量导入图片和视频到模拟器的相册的相关文章

批量导入图片到word并添加文件名

Sub InsertPic() Dim myfile As FileDialog Set myfile = Application.FileDialog(msoFileDialogFilePicker) With myfile .InitialFileName = "F:\" If .Show = -1 Then For Each fn In .SelectedItems Set mypic = Selection.InlineShapes.AddPicture(FileName:=f

VBA批量导入图片到多Word文档并加标题(会飞的鱼)

感谢会飞的鱼大牛~ 1 Public fp$, obmapp As Object 2 Sub kk() 3 文件夹浏览器 4 Application.ScreenUpdating = False 5 Set fso = CreateObject("scripting.filesystemobject") 6 If fp = "" Then Exit Sub 7 Set ff = fso.getfolder(fp) 8 For x = 1 To 17 9 Docume

利用领跑条码标签设计软件批量打印图片

日常生活中,当我们进行图片打印时,如果是少量的图片,可以一张张的设置,打印,但是当我们打印大量图片时,再一张张的设置,打印,就不现实了,非常的浪费财力,物力.这时候我们的领跑条码标签设计软件,就体现出她的优势来了,我们可以用领跑条码标签设计软件,进行图片的批量打印,能够快速,精确的打印出我们想要的图片.本文章就来介绍一下如何利用领跑条码标签打印软件完成图片的批量打印. 首先要确定要打印的图片在电脑中的具体位置,如图,确定打印的图片位置在E盘的"tutu"文件夹下,要按照图示中的图片顺序

iOS开发之获取系统相册中的图片与视频(内带url转换)

@话不多说,直接上代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82

IOS批量截取视频截图 UIImage mp4 IOS Video

IOS批量截取视频截图 //生成截图 NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Documents"]; NSLog(@"path %@", path); for (int i = 0; i<[mItems count]; i++) { NSMutableDictionary *info = (NSMutableDictionary *)mItems[i]; //视频信息 NS

iOS选取相册中iCloud云上图片和视频的处理

关于iOS选取相册中iCloud云上图片和视频 推荐看:TZImagePickerController的源码,这个是一个非常靠谱的相册选择图片视频的库 .当然也可以自己写 如下遇到的问题 工作原因,需要处理接入一个视频模块,在视频选择的时候遇到了一个不太容易发现的bug,产生的原因是由于手机内存小,而用户又打开了相册同步iCloud, 加载中的图片 在这时,如果本地可用内存过小,会导致将本地相册中的图片或视频删除只留缩略图,如果App调用的时候想要选取这种图片就需要从iCloud云中进行下载,才

iOS开发——项目实战总结&amp;类微信朋友圈发动态功能初步-图片与视频上传

类微信朋友圈发动态功能初步-图片与视频上传 最近在做一个新的项目,涉及到了关于图片和视频上传和显示的功能,研究了一段时间,总结一下. 使用AFNetworking上传图片(可一次上传多张图片,包含不同类型png, jpeg)和视频 1 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 2 3 AFHTTPRequestOperation *operation = [manager P

【iOS开发-102】怎么把图片导入到ios模拟器的相册中?

(1)比较文艺的做法:写一段代码,把图片导入到模拟器的相册中,但是这种方法,导入的图片经常出现丢三落四的现象,不知为何. - (void)viewDidLoad { [super viewDidLoad]; for (int index=1; index<11; index++) { NSString *imgName=[NSString stringWithFormat:@"%d.jpg",index]; UIImage *img=[UIImage imageNamed:img

iOS中图片与视频一次性多选

http://www.cnblogs.com/v2m_/archive/2012/12/21/2827324.html 一.使用系统的Assets Library Framework这个是用来访问Photos程序中的图片和视频的库.其中几个类解释如下 ALAsset ->包含一个图片或视频的各种信息 ALAssetRepresentation ->得到ALAsset的各种信息 ALAssetsFilter ->用来从一个ALAssetsGroup中检索ALAssets ALAssetsG