这是我的应用程序的相机叠加层,
黄色方块表示用户只保存此部分(相机中)内的照片。这就像庄稼。
当我保存捕获的图像时,它会保存放大的照片[放大的照片],
我发现,当我拍照时,它的大小是{2448, 3264}
我正在像这样裁剪图像,
- (UIImage *)imageByCroppingImage:(UIImage *)image toSize:(CGSize)size
{
double x = (image.size.width - size.width) / 2.0;
double y = (image.size.height - size.height) / 2.0;
CGRect cropRect = CGRectMake(x, y, size.height, size.width);
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], cropRect);
UIImage *cropped = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return cropped;
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];
if (image) {
UIImage *newImage = [self imageByCroppingImage:image toSize:CGSizeMake(300.f, 300.f)];
UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil);
}
}
笔记,
在进行裁剪之前固定方向。使用这个,http ://pastebin.com/WYUkDLS0
相机上的那个黄色方块的大小也相同,宽度=300,高度=300。
如果我设置前置摄像头,
UIImagePickerController
那么它会给我完美的裁剪图像输出。是的,这真的很奇怪!我已经从这里尝试了一切,裁剪 UIImage。即使https://github.com/Nyx0uf/NYXImagesKit也无济于事。
有什么想法/建议吗?
更新:
从这个问题,尝试将我的 UIImage 裁剪为 1:1 的纵横比(正方形),但它不断放大图像,导致图像模糊。为什么?
我像这样跟随@DrummerB的回答,
CGFloat originalWidth = image.size.width * image.scale;
CGFloat originalHeight = image.size.height * image.scale;
float smallestDimension = fminf(originalWidth, originalHeight);
CGRect square = CGRectMake(0, 0, smallestDimension, smallestDimension);
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], square);
UIImage *squareImage = [UIImage imageWithCGImage:imageRef scale:image.scale orientation:image.imageOrientation];
UIImageWriteToSavedPhotosAlbum(squareImage, nil, nil, nil);
CGImageRelease(imageRef);
这是我拍的
它给我带来了以下结果,
现在我得到了方形照片,但在输出中注意,我仍然在那个黄色方块之外得到照片。我想要的是获得位于黄色方块中的照片。捕获的图像仍然是大小,{w=2448, h=3264}。请注意,红色圆圈表示图像的外部部分不应包含在输出中,因为该部分不在黄色正方形内。
这有什么问题?