Just a Computer Graphics Studio & My Life

[iOS] 儲存與讀取影像檔

一直對儲存和讀取影像感到恐懼,不過有機會來嘗試一下,就藉此突破心魔吧!其實還滿容易做到,行動裝置就好比一般電腦一樣!

iOS 儲存讀取影像

程式碼功用是先建立路徑,我以Documents這個資料夾為起始點,想要在裡頭再產生1、2、3⋯⋯等資料夾,然後把影像分門別類塞到那些資料夾中。

儲存影像可以這麼寫:

//儲存檔案
    // 設定序號
    NSInteger serial = [[HMAppDelegate sharedAppDelegate].serial intValue] + 1;
    // 建立資料夾
    NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    NSString *targetDirectory = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%i", serial]];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if (![fileManager fileExistsAtPath:targetDirectory]) {
        [fileManager createDirectoryAtPath:targetDirectory withIntermediateDirectories:YES attributes:nil error:nil];
    }
    UIImage *image = [[UIImage alloc] initWithCGImage:asset.defaultRepresentation.fullScreenImage];
    NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
    NSString *imageNameFS = [NSString stringWithFormat:@"happy image.jpg"];
    [imageData writeToFile:[targetDirectory stringByAppendingPathComponent:imageNameFS] atomically:YES];

讀取影像可以這麼做:

//讀取檔案
    NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    NSString *targetDirectory = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%i", serial]];
    NSString *imageNameFS = [NSString stringWithFormat:@"happy image.jpg"];
    UIImage *imagex = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL fileURLWithPath:[targetDirectory stringByAppendingPathComponent:imageNameFS]]]];

想知道是否順利儲存影像,可以在模擬器上跑,列印出路徑變數,然後打開終端機,輸入指令:

open “/Users/happyman/Library/Application Support/iPhone Simulator/7.0/Applications/93BE4DBB-02C6-46DD-A9F5-188023F11929/Documents/1″

記得要在引號內貼上路徑,因為路徑可能會有空白。

刪除影像可以如此:

//刪除檔案
    NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    NSString *targetDirectory = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%i", serial]];
    NSString *imageNameFS = [NSString stringWithFormat:@"happy image.jpg"];
    [[NSFileManager defaultManager] removeItemAtPath:[targetDirectory stringByAppendingPathComponent:imageNameFS] error:nil];

以下程式碼很神奇:

    NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    NSString *targetDirectory = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"H/A/P/P/Y"]];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if (![fileManager fileExistsAtPath:targetDirectory]) {
        [fileManager createDirectoryAtPath:targetDirectory withIntermediateDirectories:YES attributes:nil error:nil];
    }

它會陸續幫我建立HAPPY五個層級的資料夾呢!關鍵在於withIntermediateDirectories要設YES!

註:我發現影像可以儲存成JPG和PNG,分別使用UIImageJPEGRepresentation(image, 1.0)和UIImagePNGRepresentation(image),後者可以儲存透明像素,前者若儲存有著透明像素影像,透明會變成白色喔!

png

jpg

參考:iOS 檔案寫入、讀取、刪除

廣告

Comments on: "[iOS] 儲存與讀取影像檔" (1)

  1. 如果我要儲存影像的時候,檔案名稱已經存在的話會覆蓋過去嗎?

    按讚數

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: