2011-12-29 3 views
2

이미지 갤러리를 표시하는 iPhone 용 PhoneGap 앱을 만들고 있습니다. 일부 이미지는 프로젝트 설치에 포함되어 있으며 일부 이미지는 웹에 있습니다. 사용자가 이미지를 클릭하면 이미지를 iPhone 포토 갤러리 (사진)에 저장할 수 있습니다. 처음에는 사용자가 이미지를 배경 화면으로 설정할 수 있도록 앱을 좋아했지만 매우 어렵거나 불가능하다는 것을 알았습니다.PhoneGap을 사용하여 iPhone 포토 갤러리에 이미지를 저장할 수 있습니까?

PhoneGap 및 Objective C를 사용하여 이미지를 저장하는 솔루션을 하나만 찾을 수 있지만 PhoneGap 솔루션에는 더 이상 사용되지 않는 PhoneGapCommand 클래스가 포함되어 있습니다. PGPlugin을 사용해 보았지만 코드를 작동시키지 못했습니다.

누군가가이 작업을 수행 할 수있는 현재 PhoneGap 솔루션을 보유하고 있거나 다른 사람이 올바른 방향으로 나를 안내 할 수 있으면 좋겠다고 생각합니다. 정말 감사하겠습니다.

+0

http://blog.clearlyinnovative.com/post/1097750723/phonegap-plugin-for-downloading- url? ca81a6f8 – Maulik

+0

링크, Maulik을 가져 주셔서 감사합니다. 제공 한 코드는 응용 프로그램의 문서 폴더에 저장되지만 사진을 저장 한 후 사용자가 사진에 액세스 할 수 있도록 사진에 저장하는 방법을 찾고 있습니다. –

+0

솔루션의 일부입니다. 원래 다운로드가 손상 되었기 때문에이 코드를 찾는 데 영원히 걸렸습니다. 전화 걸기의 현재 버전에 대한 코드가 업데이트되었습니다. https://github.com/khamer/phonegap-plugins-official/tree/master/iPhone/SaveImage 구현 방법은 도움이됩니다. AppDelegate 파일이있는 프로젝트의 클래스 폴더 아래에 Objective C 클래스를 추가했습니다. 나는 www 폴더의 밑에 javascript 파일을 추가했다. index.html의 javascript 파일에 대한 호출을 추가하고 anchor 태그의 onclick에서 SaveImage 함수를 호출하려고했지만 코드를 실행할 수 없습니다. –

답변

0

나는 그것을 스스로 알아 냈다. Jesse MacFadyen의 ImageHelper를 사용할 수있었습니다. 내가 처음이 구현 될 경우

http://groups.google.com/group/phonegap/tree/browse_frm/thread/8aeefbb9421f1b81/94963d9742b0738f?hide_quotes=no

http://groups.google.com/group/phonegap/browse_thread/thread/ea7ee31887b2f610/fe2c0b127cf51e7a

, 나는 모든 코드 권리를 가지고,하지만 난 ImageHelper이 PhoneGap.plist 플러그인 섹션의 항목으로 추가하지 않았다. 또한 폐지 된 PhoneGapCommand를 PGPlugin으로 변경했습니다.

1

나는이 질문이 오래되었지만이 예제는 더 이상 새로운 버전의 Cordova에 적용 할 수 없기 때문에 이것을 파악하는 데 하루가 걸렸습니다. 저는 현재 2.5.0 버전을 사용하고 있습니다. 그래서 다른 사람들이 내가했던 고통을 겪지 않아도 될 정도로 이것을 공유 할 것이라고 생각했습니다.

이미지를 저장하려면 고유 한 플러그인을 작성해야합니다. 다음 단계가 있습니다 :

  1. Cordova XCODE 프로젝트를 열고 config.xml을 편집하십시오. 생성하려는 플러그인에 대한 항목을 추가하십시오.

는 "이름은"자바 스크립트 사용됩니다 네임 스페이스와 "값"인 오브젝티브 C 클래스 이름입니다.

  1. XCODE 프로젝트에서 "플러그인"그룹을 찾습니다. 마우스 오른쪽 버튼을 클릭하고 컨텍스트 메뉴에서 "새 파일 ..."을 선택하십시오. 새 클래스 파일 "MySaveImageToAlbum"을 추가하십시오. CDVPlugin에서 상속되어야합니다.

    // MySaveImageToAlbum.h # import를

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

    // MySaveImageToAlbum.m # import를 "CDVSaveImageToAlbum.h"

    : 아래
  2. 은 헤더의 코드와 구현 파일입니다
    #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, 인수) { cordova.exec (successCallback, errorCallback "SaveImageToAlbum", "saveImageToAlbum"[인수]); } };

  4. index.html의 4 번에서 작성한 JavaScript를 참조하십시오. 캔버스가 있고이를 카메라 롤에 이미지로 저장하려는 경우 "toDataURL()"함수를 사용하여 base64 PNG 데이터를 반환 할 수 있습니다. 그런 다음 saveImageToAlbum 함수를 호출하고,이 같은 매개 변수로이를 전달할 수 있습니다

    SaveImageToAlbum.saveImageToAlbum (기능 (전자) { navigator.notification.alert (". 이미지가 성공적으로 포토 앨범에 저장되었습니다", 널 (null) "이미지 저장!"); 를}, 기능 (전자) { navigator.notification.alert ("이미지가 사진 앨범에 저장 할 수 없습니다.", NULL, "저장 오류!"); 를}, canvas.toDataURL());

그게 전부 야!

희망은 당신이 ...

감사합니다, 안토니오 C. Logarta III를 즐길 수

당신이 참조 할 수 있습니다
관련 문제