我发现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];
最后!这些都不起作用。.所以我所缺少的,任何一个,帮助。
最佳答案
-forceProcessingAtSize:
导致该过滤器输出与您提供的大小完全相同的图像,而忽略了宽高比。这会将您的图像压缩到300x300的正方形。
如果要保留图像的长宽比,则需要使用-forceProcessingAtSizeRespectingAspectRatio:
。
但是,这会使您的图像信箱化。要复制Instagram的功能,您可能想代替从图像中心切出一个正方形区域。为此,请使用长宽比为正方形的作物滤镜。