IOS:大量匯入圖片和視頻到模擬器的相簿

來源:互聯網
上載者:User

大量匯入圖片和視頻到模擬器的相簿

 

  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

  

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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.