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

时间:2011-12-29 04:05:53

标签: javascript iphone cordova

我正在为iPhone创建一个显示图片库的PhoneGap应用。项目安装中包含一些图像,有些图像来自Web。当用户点击图片时,我希望他们能够将图像保存到iPhone照片库(照片)。最初,我希望该应用程序让用户将图像设置为壁纸,但发现这将非常困难或不可能。

我只能找到一个使用PhoneGap和Objective C保存图像的解决方案,但PhoneGap解决方案包含不推荐使用的PhoneGapCommand类。我尝试使用PGPlugin,但无法使代码生效。

我希望那里的某个人可能有一个可以执行此任务的当前PhoneGap解决方案,或者如果有人能指出我正确的方向,我会非常感激!

2 个答案:

答案 0 :(得分:1)

我知道这个问题已经过时了,但是我花了一天时间来解决这个问题,因为这个例子不再适用于新版本的Cordova。我目前正在使用2.5.0版本,所以我想我会分享这个,所以其他人不必经历我所做的痛苦。

要保存图像,您必须编写自己的插件。以下是步骤:

  1. 打开Cordova XCODE项目并编辑config.xml。为您要创建的插件添加条目。

  2. “name”是您将使用的JavaScript命名空间,“value”是Objective-C类名。

    1. 在您的XCODE项目中,找到“插件”组。右键单击它并从上下文菜单中选择“新建文件...”。添加一个新的类文件“MySaveImageToAlbum”。它应该继承自CDVPlugin。

    2. 以下是标题和实施文件的代码:

      // MySaveImageToAlbum.h     #import

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

      // MySaveImageToAlbum.m     #import“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文件。这是代码:

      var SaveImageToAlbum =    {      saveImageToAlbum:function(successCallback,errorCallback,args)   {             cordova.exec(successCallback,errorCallback,“SaveImageToAlbum”,“saveImageToAlbum”,[args]);         }     };

    4. 引用index.html中no.4中创建的JavaScript。假设您有一个画布并且想要将其作为图像保存到相机胶卷,您可以使用其“toDataURL()”函数来返回base64 PNG数据。然后,您可以调用saveImageToAlbum函数并将其作为参数传递,如下所示:

      SaveImageToAlbum.saveImageToAlbum(函数(E){                                                         navigator.notification.alert(“图像已成功保存在相册中。”,null,“图像已保存!”);                                                     },                                                      函数(e)中{                                                         navigator.notification.alert(“图片无法保存在相册中。”,null,“保存错误!”);                                                      },                                                      canvas.toDataURL());

    5. 就是这样!

      希望你喜欢......

      此致 Antonio C. Logarta III

答案 1 :(得分: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。