我正在为iPhone创建一个显示图片库的PhoneGap应用。项目安装中包含一些图像,有些图像来自Web。当用户点击图片时,我希望他们能够将图像保存到iPhone照片库(照片)。最初,我希望该应用程序让用户将图像设置为壁纸,但发现这将非常困难或不可能。
我只能找到一个使用PhoneGap和Objective C保存图像的解决方案,但PhoneGap解决方案包含不推荐使用的PhoneGapCommand类。我尝试使用PGPlugin,但无法使代码生效。
我希望那里的某个人可能有一个可以执行此任务的当前PhoneGap解决方案,或者如果有人能指出我正确的方向,我会非常感激!
答案 0 :(得分:1)
我知道这个问题已经过时了,但是我花了一天时间来解决这个问题,因为这个例子不再适用于新版本的Cordova。我目前正在使用2.5.0版本,所以我想我会分享这个,所以其他人不必经历我所做的痛苦。
要保存图像,您必须编写自己的插件。以下是步骤:
打开Cordova XCODE项目并编辑config.xml。为您要创建的插件添加条目。
“name”是您将使用的JavaScript命名空间,“value”是Objective-C类名。
在您的XCODE项目中,找到“插件”组。右键单击它并从上下文菜单中选择“新建文件...”。添加一个新的类文件“MySaveImageToAlbum”。它应该继承自CDVPlugin。
以下是标题和实施文件的代码:
// 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
接下来,您需要创建一个调用此本机代码的javascript文件。这是代码:
var SaveImageToAlbum = { saveImageToAlbum:function(successCallback,errorCallback,args) { cordova.exec(successCallback,errorCallback,“SaveImageToAlbum”,“saveImageToAlbum”,[args]); } };
引用index.html中no.4中创建的JavaScript。假设您有一个画布并且想要将其作为图像保存到相机胶卷,您可以使用其“toDataURL()”函数来返回base64 PNG数据。然后,您可以调用saveImageToAlbum函数并将其作为参数传递,如下所示:
SaveImageToAlbum.saveImageToAlbum(函数(E){ navigator.notification.alert(“图像已成功保存在相册中。”,null,“图像已保存!”); }, 函数(e)中{ navigator.notification.alert(“图片无法保存在相册中。”,null,“保存错误!”); }, canvas.toDataURL());
就是这样!
希望你喜欢......
此致 Antonio C. Logarta III
答案 1 :(得分:0)
我自己想通了。我能够使用Jesse MacFadyen的ImageHelper。
http://groups.google.com/group/phonegap/browse_thread/thread/ea7ee31887b2f610/fe2c0b127cf51e7a
当我第一次实现这个时,我的所有代码都正确,但我没有将ImageHelper添加为PhoneGap.plist插件部分中的条目。我还将已弃用的PhoneGapCommand更改为PGPlugin。