2

我发现Instagram有一个像300*300这样的相机窗口?它是一个正方形,然后我尝试使用GPUImage制作相同的相机尺寸。所以我这样写:

primaryView = [GPUImageView alloc] initWithFrame:
                                   CGRectMake(0,0,300,300)];//define a square view

//define a still camera
stillCamera = [[GPUImageStillCamera alloc]
              initWithSessionPreset:AVCaptureSessionPreset640x480
              cameraPosition:AVCaptureDevicePositionFront];

//make it portrait
stillCamera.outputImageOrientation = UIInterfaceOrientationPortrait;

//define a filter
filter = [[GPUImageFilter alloc] init];

//force the output to 300*300
[filter forceProcessingAtSize:((GPUImageView*)self.primaryView).sizeInPixels];

//set things up
[stillCamera addTarget: filter];
[filter addTarget: primaryView];
[stillCamera startCameraCapture];

现在我真的得到了一个方形视图..但是视图看起来很平坦,完全失真,我认为可能是纵横比有问题。然后我将主视图的填充模式设置如下:

[primaryView setFillMode:kGPUImageFillModePreserveAspectRatioAndFill];

那么这个:

[primaryView setFillMode:kGPUImageFillModePreserveAspectRatio];

那么这个:

[primaryView kGPUImageFillModeStretch];

最后!这些都不起作用..所以我所缺少的,任何人,帮助。

4

1 回答 1

9

-forceProcessingAtSize:导致该过滤器输出与您提供的尺寸完全相同的图像,而忽略纵横比。这会将您的图像压缩成 300x300 的正方形。

如果要保留图像的纵横比,则需要使用-forceProcessingAtSizeRespectingAspectRatio:.

但是,这将使您的图像信箱化。要复制 Instagram 的功能,您可能希望从图像中心切出一个正方形区域。为此,请使用具有方形纵横比的裁剪过滤器。

于 2013-07-22T18:48:21.053 回答