Наложение изображения на предварительный просмотр камеры на iOS с помощью Phonegap - PullRequest
3 голосов
/ 01 сентября 2011

Я ищу создание приложения, в котором полупрозрачное изображение накладывается на предварительный просмотр камеры. Я знаю, что они не поддерживают это в родном api камеры Phonegap. Мне интересно, если кто-нибудь, кто имеет некоторый опыт написания плагинов Phonegap, может дать мне какой-либо совет о том, возможно ли это с плагином. Я думаю, что я видел, что эта техника возможна через собственный код, поэтому мне кажется, что было бы возможно написать плагин Phonegap для доступа к этой функциональности, у меня просто нет опыта работы с плагинами Phonegap.

Ответы [ 2 ]

7 голосов
/ 11 февраля 2014

Я знаю, уже немного поздно, но есть выход (только для 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

Затем добавьте эти строки в 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
                    }); 
2 голосов
/ 18 марта 2015

Я попробовал принятый ответ, но, к сожалению, у меня не получилось.

Вместо этого я нашел гораздо более простое решение.В 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.

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