2011-09-01 68 views
3

我期待創建一個應用程序,其中半透明圖像疊加在相機預覽上。我知道他們在原生Phonegap相機API中不支持這一點。我想知道是否有誰有編寫Phonegap插件的經驗可以給我任何意見,這是否可能與一個插件。我想我已經看到,通過本地代碼可以實現這種技術,所以在我看來,編寫一個Phonegap插件來訪問這個功能是可能的,我只是沒有任何有關Phonegap插件的經驗。使用Phonegap在iOS上的相機​​預覽上疊加圖像

+0

我在找同樣的東西......你有沒有找到過什麼? – Harry

+0

這並不完全回答這個問題,但值得一看:http://libresoft.es/node/146。源代碼位於底部,基於phonegap。 – hitautodestruct

回答

6

我知道,這有點太晚了,但有一種方法(僅iPad)。您可以使用標準org.apache.cordova.camera -Plugin。但你必須調整它有點

首先subclasse的CDVCameraPicker這樣你就可以通過切換科爾多瓦-API覆蓋:

CDVCameraPicker + Overlay.h:

#import "CDVCamera.h" 

@interface CDVCameraPicker (Overlay) 
@property (nonatomic, strong) id showOverlay; 
@end 

CDVCameraPicker + Overlay.m:

#import "CDVCameraPicker+Overlay.h" 
#import <objc/runtime.h> 

static void *overlayKey; 

@implementation CDVCameraPicker (Overlay) 
@dynamic showOverlay; 

- (void) setShowOverlay:(id)showOverlay { 
    objc_setAssociatedObject(self, overlayKey, showOverlay, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
} 
- (id) showOverlay { 
    return objc_getAssociatedObject(self, overlayKey); 
} 
@end 

然後添加這些行到CDVCamera.m檢查ImagePickerSourceType右後(132線)

if ([cameraPicker.showOverlay intValue] == 1) { 
     UIImageView *overlay = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)]; 
     overlay.contentMode = UIViewContentModeScaleAspectFill; 
     overlay.image = [UIImage imageNamed:@"overlay.png"]; 
    } 

不要忘了導入子類CameraPicker在CDVCamera.m #import "CDVCameraPicker+Overlay.h"

不,你必須編輯Camera.js - 文件 添加該行的其他選項下面

var showOverlay = getValue(options.showOverlay, false); 

然後將var添加到args - 最後一個索引處的陣列。就是這樣。現在你可以切換你的疊加像這樣:

 navigator.camera.getPicture(onSuccess, onFail, { quality: 40, 
         destinationType: Camera.DestinationType.FILE_URI, 
         sourceType: Camera.PictureSourceType.CAMERA, 
         encodingType: Camera.EncodingType.JPEG, 
         correctOrientation: true, 
         saveToPhotoAlbum: true, 
         showOverlay: false 
        }); 
+0

這是一箇舊的,從一個長期完成的項目(或放棄不記得),但我想花時間感謝你這個深入的答案。我將來可能會再次需要它,我相信它會派上用場! – tmartineau

+0

你能接受這個答案嗎?謝謝 – matthisb

+0

@tmartineau我試過了,但沒有奏效。你知道這是否仍然適用於最新版本的科爾多瓦?我可以讓覆蓋圖像出現的唯一方法是在CDVCamera.m的第685行的'if(cameraPicker.sourceType == UIImagePickerControllerSourceTypeCamera)'中。我使用這行代碼'UIImageView * overlayImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@「myImage」]]; overlayImage.frame = CGRectMake(0,0,768,1024); cameraPicker.cameraOverlayView = overlayImage;'問題是需要10秒才能加載或根本沒有。 – Paul

2

我試過接受的答案,但不幸的是沒有爲我工作。

相反,我找到了一個更簡單的解決方案。在CDVCamera.m

+ (instancetype) createFromPictureOptions(CDVPictureOptions*)pictureOptions;{ 

     CDVCameraPicker* cameraPicker = [[CDVCameraPicker alloc] init]; 
     cameraPicker.pictureOptions = pictureOptions; 
     cameraPicker.sourceType = pictureOptions.sourceType; 
     cameraPicker.allowsEditing = pictureOptions.allowsEditing; 

if (cameraPicker.sourceType == UIImagePickerControllerSourceTypeCamera) { 
    // More code... 

     // Here is where you place your overlay. 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      UIImageView *overlayImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myImage.png"]]; 
      overlayImage.frame = CGRectMake(0, 0, 768, 1024); 
      [cameraPicker.cameraOverlayView addSubview:overlayImage]; 
      [cameraPicker setCameraOverlayView:overlayImage]; 
    }); 

    // Code left out for brevity 
    } 
} 

它來執行使用大中央調度覆蓋是很重要的。