如何使用PhoneGap将图像保存到iPhone照片库?
我正在为显示图像库的iPhone创建PhoneGap应用程序。一些图像包含在项目安装中,一些来自网络。当用户点击图片时,我希望他们能够将图片保存到iPhone照片库(照片)。最初,我希望应用程序让用户将图像设置为壁纸,但发现它会非常困难或不可能。如何使用PhoneGap将图像保存到iPhone照片库?
我只能找到一个解决方案来使用PhoneGap和Objective C保存图像,但PhoneGap解决方案包含不赞成使用的PhoneGapCommand类。我尝试使用PGPlugin,但无法让代码正常工作。
我希望有人在那里可能有一个当前的PhoneGap解决方案,可以执行此任务,或者如果任何人都可以指出我在正确的方向,我会非常感激!
我想出了我自己的想法。我能够使用Jesse MacFadyen的ImageHelper。
http://groups.google.com/group/phonegap/browse_thread/thread/ea7ee31887b2f610/fe2c0b127cf51e7a
当我第一次实现了这个,我把所有的代码的权利,但我没有ImageHelper添加为PhoneGap.plist插件部分的条目。我也将已弃用的PhoneGapCommand更改为PGPlugin。
我知道这个问题很旧,但花了我一天的时间才弄清楚这个例子,因为这个例子不再适用于新版本的Cordova。我目前正在使用2.5.0版本,所以我想我会分享这个,以便其他人不必经历我所做的痛苦。
要保存图片,您必须编写自己的插件。以下是步骤:
-
打开您的Cordova XCODE项目并编辑config.xml。为您要创建的插件添加一个条目。
“名” 是您将使用JavaScript的命名空间和 “价值” 是Objective-C类的名称。
在您的XCODE项目中,找到“插件”组。右键单击它并从上下文菜单中选择“新建文件...”。添加一个新的类文件“MySaveImageToAlbum”。它应该从CDVPlugin继承。
-
下面是组头的代码和执行文件:
// 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
-
接下来,您将需要创建一个JavaScript文件,该文件将调用此本机码。下面的代码:
变种SaveImageToAlbum = { saveImageToAlbum:功能(successCallback,errorCallback,参数) { cordova.exec(successCallback,errorCallback, “SaveImageToAlbum”, “saveImageToAlbum”,[参数]); } };
-
在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
你可以参考http://blog.clearlyinnovative.com/post/1097750723/phonegap-plugin-for-downloading- url?ca81a6f8 – Maulik 2011-12-29 04:29:48
谢谢你的链接,Maulik。您提供的代码会保存到应用程序的文档文件夹中,但是,我正在寻找一种方法来保存到照片,以便用户在保存后可以访问照片。 – 2011-12-29 10:46:07
找到解决方案的一部分。我永远花了我的代码,因为原来的下载被破坏了。该代码已更新为当前版本的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