使用Phonegap在iOS上预览相机上的图像

我正在寻找创build一个半透明的图像叠加在相机预览的应用程序。 我知道他们是不支持在本机Phonegap相机API这一点。 我想知道是否有谁有一些编写Phonegap插件的经验可以给我任何意见,这是否可能与一个插件。 我想我已经看到,这种技术可以通过本地代码,所以在我看来,可以编写一个PhoneGap插件来访问这个function,我只是没有任何经验的PhoneGap插件。

我知道,这有点晚了,但有一种方法(只有iPad)。 你可以使用标准的org.apache.cordova.camera -Plugin。 但是你必须调整一下

首先将CDVCameraPicker子类,以便通过cordova-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 

然后在检查ImagePickerSourceType(第132行)后将这些行添加到CDVCamera.m中,

  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"导入#import "CDVCameraPicker+Overlay.h"

不需要编辑Camera.js在其他选项下添加此行

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

然后将var添加到最后一个索引处的args -Array。 就是这样。 现在你可以像这样切换覆盖:

  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 }); 

我尝试了接受的答案,但不幸的是没有为我工作。

相反,我find了一个更简单的解决scheme。 在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 } } 

使用Grand Central Dispatch执行覆盖很重要。