【发布时间】:2017-06-23 11:13:30
【问题描述】:
我正在尝试在 Objective-C (iOS) 中调整 JPEG 图像的大小。输入为 JPG 文件,输出应为 UIImage。
我有这个代码:
// Load image from a file
NSData *imageData = [NSData dataWithContentsOfFile:jpgFile];
UIImage *inputImage = [UIImage imageWithData:imageData];
CIImage *ciImage = inputImage.CIImage;
// Set Lanczos filter
CIFilter *scaleFilter = [CIFilter filterWithName:@"CILanczosScaleTransform"];
[scaleFilter setValue:ciImage forKey:@"inputImage"];
[scaleFilter setValue:[NSNumber numberWithFloat:0.5] forKey:@"inputScale"];
[scaleFilter setValue:[NSNumber numberWithFloat:1.0] forKey:@"inputAspectRatio"];
// Get an output
CIImage *finalImage = [scaleFilter valueForKey:@"outputImage"];
UIImage *outputImage = [[UIImage alloc] initWithCIImage:finalImage];
但是输出的图片无效(outputImage.size.height is 0),在其他处理中会导致如下错误:
CGContextDrawImage:无效的上下文 0x0。如果你想看 回溯,请设置 CG_CONTEXT_SHOW_BACKTRACE 环境 多变的。 ImageIO:JPEG 空 JPEG 图像(不支持 DNL)
更新:
我不知道,上面的代码有什么问题(除了下面 Sulthan 提到的初始化 - 谢谢他)。我最后使用了以下代码(此代码工作正常):
CIImage *input_ciimage = [[CIImage alloc] initWithImage:inputImage];
CIImage *output_ciimage =
[[CIFilter filterWithName:@"CILanczosScaleTransform" keysAndValues:
kCIInputImageKey, input_ciimage,
kCIInputScaleKey, [NSNumber numberWithFloat:0.5],
nil] outputImage];
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef output_cgimage = [context createCGImage:output_ciimage fromRect:[output_ciimage extent]];
UIImage *output_uiimage = [UIImage imageWithCGImage:output_cgimage];
CGImageRelease(output_cgimage);
【问题讨论】:
标签: ios objective-c uiimage image-resizing cifilter