日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS:批量导入图片和视频到模拟器的相册

發布時間:2024/1/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 filesNSMutableArray *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 projectNSMutableArray *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 filesNSMutableArray *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 rollfor (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 rollfor (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

  

注:轉載請注明出處!歡迎大家加我QQ 1592232964,一起討論共同進步。

?

總結

以上是生活随笔為你收集整理的IOS:批量导入图片和视频到模拟器的相册的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。