2011-12-29 137 views
2

我正在爲顯示圖像庫的iPhone創建PhoneGap應用程序。一些圖像包含在項目安裝中,一些來自網絡。當用戶點擊圖片時,我希望他們能夠將圖片保存到iPhone照片庫(照片)。最初,我希望應用程序讓用戶將圖像設置爲壁紙,但發現它會非常困難或不可能。如何使用PhoneGap將圖像保存到iPhone照片庫?

我只能找到一個解決方案來使用PhoneGap和Objective C保存圖像,但PhoneGap解決方案包含不贊成使用的PhoneGapCommand類。我嘗試使用PGPlugin,但無法讓代碼正常工作。

我希望有人在那裏可能有一個當前的PhoneGap解決方案,可以執行此任務,或者如果任何人都可以指出我在正確的方向,我會非常感激!

+0

你可以參考http://blog.clearlyinnovative.com/post/1097750723/phonegap-plugin-for-downloading- url?ca81a6f8 – Maulik 2011-12-29 04:29:48

+0

謝謝你的鏈接,Maulik。您提供的代碼會保存到應用程序的文檔文件夾中,但是,我正在尋找一種方法來保存到照片,以便用戶在保存後可以訪問照片。 – 2011-12-29 10:46:07

+0

找到解決方案的一部分。我永遠花了我的代碼,因爲原來的下載被破壞了。該代碼已更新爲當前版本的PhoneGap: https://github.com/khamer/phonegap-plugins-official/tree/master/iPhone/SaveImage 我可以使用幫助實施它。我在AppDelegate文件所在的項目的classes文件夾下添加了Objective C類。我在www文件夾下添加了javascript文件。 我在index.html中添加了一個對JavaScript文件的調用,並嘗試在錨點標記的onclick中調用SaveImage函數,但無法運行代碼。 – 2011-12-29 20:55:43

回答

0

我想出了我自己的想法。我能夠使用Jesse MacFadyen的ImageHelper。

http://groups.google.com/group/phonegap/browse_thread/thread/ea7ee31887b2f610/fe2c0b127cf51e7a

http://groups.google.com/group/phonegap/tree/browse_frm/thread/8aeefbb9421f1b81/94963d9742b0738f?hide_quotes=no

當我第一次實現了這個,我把所有的代碼的權利,但我沒有ImageHelper添加爲PhoneGap.plist插件部分的條目。我也將已棄用的PhoneGapCommand更改爲PGPlugin。

1

我知道這個問題很舊,但花了我一天的時間才弄清楚這個例子,因爲這個例子不再適用於新版本的Cordova。我目前正在使用2.5.0版本,所以我想我會分享這個,以便其他人不必經歷我所做的痛苦。

要保存圖片,您必須編寫自己的插件。以下是步驟:

  1. 打開您的Cordova XCODE項目並編輯config.xml。爲您要創建的插件添加一個條目。

「名」 是您將使用JavaScript的命名空間和 「價值」 是Objective-C類的名稱。

  1. 在您的XCODE項目中,找到「插件」組。右鍵單擊它並從上下文菜單中選擇「新建文件...」。添加一個新的類文件「MySaveImageToAlbum」。它應該從CDVPlugin繼承。

  2. 下面是組頭的代碼和執行文件:

    // MySaveImageToAlbum.h #進口

    @interface MySaveImageToAlbum : CDVPlugin 
    - (void)saveImageToAlbum:(CDVInvokedUrlCommand*)command; 
    @end 
    

    // MySaveImageToAlbum.m #進口 「CDVSaveImageToAlbum.h」

    #import <UIKit/UIKit.h> 
    
    
    @implementation MySaveImageToAlbum 
    
    - (void)saveImageToAlbum:(CDVInvokedUrlCommand*)command 
    { 
        CDVPluginResult* pluginResult = nil; 
        NSURL *url = [NSURL URLWithString:[command.arguments objectAtIndex:0]]; 
        NSData *args = [NSData dataWithContentsOfURL:url]; 
    
    
        if (args != nil && [args length] > 0) { 
    
         @try 
         { 
          UIImage *image = [UIImage imageWithData:args]; 
          NSData *imgdata = UIImagePNGRepresentation(image); 
          UIImage *image2 = [UIImage imageWithData:imgdata]; 
          UIImageWriteToSavedPhotosAlbum(image2, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); 
    
    
          pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:@"success"]; 
          [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; 
         } 
         @catch (NSException *exception) { 
          pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR]; 
          [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; 
         } 
    
        } else { 
         pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR]; 
         [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; 
        } 
    
    } 
    
    
    - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error 
        contextInfo:(void *)contextInfo 
    { 
        // Was there an error? 
        if (error != NULL) 
        { 
         // Show error message... 
    
        } 
        else // No errors 
        { 
         // Show message image successfully saved 
    
        } 
    } 
    
    
    @end 
    
  3. 接下來,您將需要創建一個JavaScript文件,該文件將調用此本機碼。下面的代碼:

    變種SaveImageToAlbum = { saveImageToAlbum:功能(successCallback,errorCallback,參數) { cordova.exec(successCallback,errorCallback, 「SaveImageToAlbum」, 「saveImageToAlbum」,[參數]); } };

  4. 在index.html中引用第4版中創建的JavaScript。假設你有一個畫布,並且你想把它作爲一個圖像保存到相機膠捲上,你可以使用它的「toDataURL()」函數返回一個base64 PNG數據。然後,您可以調用saveImageToAlbum功能,通過這個作爲像這樣的參數:

    SaveImageToAlbum.saveImageToAlbum(功能(E){ navigator.notification.alert(「圖片已經成功保存在相冊」,空,「Image saved!」); }, function(e){ navigator.notification.alert(「Image can not be saved in the Album Album。」,null,「Save error!」); }, canvas.toDataURL());

就是這樣!

希望你享受...

問候, 安東尼C. Logarta III

相關問題