您好我有以下功能来保存具有比例因子
的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
有人能在这里指出我的错误吗?
答案 0 :(得分:0)
文档说明scale
会更改 size
属性报告的内容。它不会改变图像的像素数据。 UIImage
的内部表示仍然具有相同的维度。
比例
解释图像数据时使用的比例因子。 指定比例因子为1.0会导致图像的大小 匹配图像的基于像素的尺寸。应用不同的 比例因子会根据大小报告更改图像的大小 属性。
要缩放图像,您需要自己进行缩放。
所以你可以这样做。将该方法放在类中的链接中,然后在将图像转换为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];