Как я могу сохранить изображение в фотогалерее iPhone с помощью PhoneGap? - PullRequest
2 голосов
/ 29 декабря 2011

Я создаю приложение PhoneGap для iPhone, которое отображает галерею изображений. Некоторые изображения включены в установку проекта, а некоторые из Интернета. Когда пользователь нажимает на изображение, я бы хотел, чтобы он мог сохранить изображение в фотогалерее iPhone (фотографии). Изначально мне бы хотелось, чтобы приложение позволяло пользователю устанавливать изображение в качестве обоев, но я обнаружил, что это будет чрезвычайно сложно или невозможно.

Я мог найти только одно решение для сохранения изображения с использованием PhoneGap и Objective C, но решение PhoneGap содержало класс PhoneGapCommand, который устарел. Я пытался использовать PGPlugin, но не смог заставить работать код.

Я надеюсь, что кто-то может иметь текущее решение PhoneGap, которое может выполнить эту задачу, или если кто-то может указать мне правильное направление, я был бы очень признателен!

Ответы [ 2 ]

1 голос
/ 05 июня 2013

Я знаю, что этот вопрос старый, но мне потребовался день, чтобы понять это, так как этот пример больше не применим к новой версии Cordova. В настоящее время я использую версию 2.5.0, поэтому я решил поделиться этим, чтобы другим не пришлось проходить через боль, которую я сделал.

Чтобы сохранить изображение, вам нужно написать свой собственный плагин. Вот шаги:

  1. Откройте ваш проект Cordova XCODE и отредактируйте файл config.xml. Добавьте запись для плагина, который вы будете создавать.

"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: функция (successCallback, errorCallback, args) { cordova.exec (successCallback, errorCallback, "SaveImageToAlbum", "saveImageToAlbum", [args]); } };

  4. Сделайте ссылку на JavaScript, созданный в № 4, в вашем index.html. Предположим, что у вас есть холст, и вы хотите сохранить его как изображение в рулоне камеры, вы можете использовать его функцию toDataURL () для возврата данных PNG base64. Затем вы можете вызвать функцию saveImageToAlbum и передать ее в качестве параметра следующим образом:

    SaveImageToAlbum.saveImageToAlbum (функция (е) { navigator.notification.alert («Изображение успешно сохранено в фотоальбоме.», null, «Изображение сохранено!»); }, Функция (е) { navigator.notification.alert («Невозможно сохранить изображение в фотоальбоме.», null, «Ошибка сохранения!»); }, canvas.toDataURL ());

Вот и все!

Надеюсь, вам понравится ...

С уважением, Антонио К. Логарта III

0 голосов
/ 31 декабря 2011

Я понял это самостоятельно. Я смог использовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...