如何使用PhoneGap将图像保存到iPhone照片库?

问题描述:

我正在为显示图像库的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

我想出了我自己的想法。我能够使用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。

我知道这个问题很旧,但花了我一天的时间才弄清楚这个例子,因为这个例子不再适用于新版本的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