通过调整大小UIImage缩放不正确并导出到jpeg

时间:2018-02-20 15:44:52

标签: ios objective-c image-processing scale

您好我有以下功能来保存具有比例因子

的jpg图像
- (UIImage*) pixelBufferToUIImage:(CVPixelBufferRef) pixelBuffer
{
    CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];

    CIContext *temporaryContext = [CIContext contextWithOptions:nil];
    CGImageRef videoImage = [temporaryContext
                             createCGImage:ciImage
                             fromRect:CGRectMake(0, 0,
                                                 CVPixelBufferGetWidth(pixelBuffer),
                                                 CVPixelBufferGetHeight(pixelBuffer))];
    UIImage *uiImage = [UIImage imageWithCGImage:videoImage scale:(1/scale_factor) orientation:UIImageOrientationUp];
    CGImageRelease(videoImage);
    return uiImage;
}

我这样称呼这个方法,

NSData* image = UIImageJPEGRepresentation([self pixelBufferToUIImage:frame.capturedImage], 0.8);
[image writeToFile:[self getFilePathWith:folderName and:@"image.jpg"] atomically:NO];

如果我使用原始分辨率scale_factor = 1.0f来调用保存,我会获得1280x720图片

但是,我希望将图像尺寸减半。我尝试设置scale_factor = 0.5f and 2.0f两者都不起作用,我将jpg的大小设为1280x720

有人能在这里指出我的错误吗?

1 个答案:

答案 0 :(得分:0)

文档说明scale会更改 size 属性报告的内容。它不会改变图像的像素数据。 UIImage的内部表示仍然具有相同的维度。

  

比例
解释图像数据时使用的比例因子。   指定比例因子为1.0会导致图像的大小   匹配图像的基于像素的尺寸。应用不同的   比例因子会根据大小报告更改图像的大小   属性。

要缩放图像,您需要自己进行缩放。

Have a look here how to do it

所以你可以这样做。将该方法放在类中的链接中,然后在将图像转换为JPEG之前添加缩放调用。

CGFloat newScale = 0.5;
UIImage *uiImage = [self pixelBufferToUIImage:frame.capturedImage];
uiImage = [YourClass imageWithImage:uiImage scaledToSize:CGSizeMake(uiImage.size.width * newScale, uiImage.size.height * newScale)];
NSData* image = UIImageJPEGRepresentation(uiImage, 0.8);
[image writeToFile:[self getFilePathWith:folderName and:@"image.jpg"] atomically:NO];