2

这是我的应用程序的相机叠加层,

在此处输入图像描述

黄色方块表示用户只保存此部分(相机中)内的照片。这就像庄稼。

当我保存捕获的图像时,它会保存放大的照片[放大的照片],

在此处输入图像描述

我发现,当我拍照时,它的大小是{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}。请注意,红色圆圈表示图像的外部部分不应包含在输出中,因为该部分不在黄色正方形内。

这有什么问题?

4

1 回答 1

0

看起来您在实现中收到的图像正在返回 300 x 300 像素的图像裁剪。屏幕上的黄色方块是 300 x 300 点。点与像素不同。因此,如果您的照片宽为 3264 像素,则将其裁剪为 300 像素将返回大约 1/10 原始尺寸的图像。

于 2014-07-02T17:49:19.567 回答