Я знаю, что этот вопрос старый, но мне потребовался день, чтобы понять это, так как этот пример больше не применим к новой версии 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: функция (successCallback, errorCallback, args)
{
cordova.exec (successCallback, errorCallback, "SaveImageToAlbum", "saveImageToAlbum", [args]);
}
};
Сделайте ссылку на JavaScript, созданный в № 4, в вашем index.html. Предположим, что у вас есть холст, и вы хотите сохранить его как изображение в рулоне камеры, вы можете использовать его функцию toDataURL () для возврата данных PNG base64. Затем вы можете вызвать функцию saveImageToAlbum и передать ее в качестве параметра следующим образом:
SaveImageToAlbum.saveImageToAlbum (функция (е) {
navigator.notification.alert («Изображение успешно сохранено в фотоальбоме.», null, «Изображение сохранено!»);
},
Функция (е) {
navigator.notification.alert («Невозможно сохранить изображение в фотоальбоме.», null, «Ошибка сохранения!»);
},
canvas.toDataURL ());
Вот и все!
Надеюсь, вам понравится ...
С уважением,
Антонио К. Логарта III