iOS:如何使用GPUImage从相机保存缩放的caputre图像?

iOS:如何使用GPUImage从相机保存缩放的caputre图像?,ios,objective-c,iphone,camera,gpuimage,Ios,Objective C,Iphone,Camera,Gpuimage,嗨,我想用GPUImage设置相机的缩放功能。我已经做到了。但当我通过缩放从相机捕获图像并在图像库中查看保存的图像时,我发现图像保存为正常(未找到缩放)。我想在任何模式下,我捕获的图像必须保存在相册。我怎样才能解决这个问题任何建议都会很好。谢谢各位。我的代码: - (void)viewDidLoad { [super viewDidLoad]; self.library = [[ALAssetsLibrary alloc] init]; [self setViewLayOut]; [self s

嗨,我想用GPUImage设置相机的缩放功能。我已经做到了。但当我通过缩放从相机捕获图像并在图像库中查看保存的图像时,我发现图像保存为正常(未找到缩放)。我想在任何模式下,我捕获的图像必须保存在相册。我怎样才能解决这个问题任何建议都会很好。谢谢各位。我的代码:

- (void)viewDidLoad {
[super viewDidLoad];
self.library = [[ALAssetsLibrary alloc] init];
[self setViewLayOut];
[self setupFilter];
[self setZoomFunctionlityOnCamera];

}

- (void)setupFilter;
{
videoCamera = [[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
switch (filterType)
{
    case GPUIMAGE_COLORINVERT:
    {
        self.title = @"Color Negative";
        filter = [[GPUImageColorInvertFilter alloc] init];
    };
    break;
    case GPUIMAGE_GRAYSCALE:
    {
        self.title = @"Black and White Positive";
        filter = [[GPUImageGrayscaleFilter alloc] init];
    };
    break;

    default: filter = [[GPUImageFilter alloc] init];
    self.title = @"Color Positive";
    break;
}
videoCamera.runBenchmark = YES;
filterView =  (GPUImageView *)cameraView;

[filter addTarget:filterView];
[videoCamera addTarget:filter];
[videoCamera startCameraCapture];
}



 -(void)setZoomFunctionlityOnCamera
{    
  UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchDetected:)];
[self.view addGestureRecognizer:pinchRecognizer];
pinchRecognizer.delegate = self;
}

- (void)pinchDetected:(UIPinchGestureRecognizer *)pinchRecognizer
{
if([gestureRecognizer state] == UIGestureRecognizerStateBegan) {
    // Reset the last scale, necessary if there are multiple objects with different scales
    lastScale = [gestureRecognizer scale];
}

if ([gestureRecognizer state] == UIGestureRecognizerStateBegan ||
    [gestureRecognizer state] == UIGestureRecognizerStateChanged) {

    CGFloat currentScale = [[[gestureRecognizer view].layer valueForKeyPath:@"transform.scale"] floatValue];

    // Constants to adjust the max/min values of zoom
    const CGFloat kMaxScale = 5.0;
    const CGFloat kMinScale = 1.0;

    CGFloat newScale = 1 -  (lastScale - [gestureRecognizer scale]); // new scale is in the range (0-1)
    newScale = MIN(newScale, kMaxScale / currentScale);
    newScale = MAX(newScale, kMinScale / currentScale);
    CGAffineTransform transform = CGAffineTransformScale([[gestureRecognizer view] transform], newScale, newScale);
    [gestureRecognizer view].transform = transform;

    lastScale = [gestureRecognizer scale]; 
 }



- (IBAction)clickPhotoBtn:(id)sender {
if (!isCameraPermissionAccessed) {
    [self showAccessDeinedMessage :@"Camera permission denied" withMessage:@"To enable, please go to settings and allow camera permission for this app."];
    return;
}
[videoCamera capturePhotoAsJPEGProcessedUpToFilter:filter withCompletionHandler:^(NSData *processedJPEG, NSError *error){
    if (error!=nil)
    {
        [self showErrorMessage:@"Unable to capture image" ];
        return ;
    }

    else {
    UIImage *image = [UIImage imageWithData:processedJPEG];
    if (filterType == GPUIMAGE_GRAYSCALE) {
        GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:image];
        GPUImageColorInvertFilter *stillImageFilter = [[GPUImageColorInvertFilter alloc] init];
        [stillImageSource addTarget:stillImageFilter];
        [stillImageFilter useNextFrameForImageCapture];
        [stillImageSource processImage];
        UIImage *currentFilteredVideoFrame = [stillImageFilter imageFromCurrentFramebuffer];
        UIImageWriteToSavedPhotosAlbum(currentFilteredVideoFrame,
                                       nil,
                                       nil,
                                       nil);
    }
    else{
        UIImageWriteToSavedPhotosAlbum(image,
                                       nil,
                                       nil,
                                       nil);
    }

        NSString *message = @"Image saved";
        UIAlertView *toast = [[UIAlertView alloc] initWithTitle:nil
                                                        message:message
                                                       delegate:nil
                                              cancelButtonTitle:nil
                                              otherButtonTitles:nil, nil];
        [toast show];
        int duration = 1;
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
            [toast dismissWithClickedButtonIndex:0 animated:YES];
        });
  }
}]);
}

在代码中,您使用transfrom来实现缩放效果。但是,变换实际上对实际拍摄的照片没有任何影响。它只影响GPUImageView的形状。如果您想获得裁剪的图片,请使用GPUImageCropFilter

在代码中,您使用transfrom来实现缩放效果。但是,变换实际上对实际拍摄的照片没有任何影响。它只影响GPUImageView的形状。如果要获得裁剪后的图片,请改用GPUImageCropFilter

使用GPUImageTransformFilter应用缩放效果,然后使用以下两个功能拍摄图像:

[transformFilter useNextFrameForImageCapture];
UIImage *capturedImage = [transformFilter imageFromCurrentFramebuffer];
// then save captured image to photo album 

使用GPUImageTransformFilter应用缩放效果,然后使用以下两个功能捕获图像:

[transformFilter useNextFrameForImageCapture];
UIImage *capturedImage = [transformFilter imageFromCurrentFramebuffer];
// then save captured image to photo album 

嗨,你找到解决办法了吗?嗨,你找到解决办法了吗?