Objective-C(iOS),使用CIFilter调整图像大小会产生无效输出(UIImage)

Objective-C(iOS),使用CIFilter调整图像大小会产生无效输出(UIImage),ios,objective-c,uiimage,image-resizing,cifilter,Ios,Objective C,Uiimage,Image Resizing,Cifilter,我正在尝试在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;

我正在尝试在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为0
),并在其他处理中导致以下错误:

CGContextDrawImage:上下文0x0无效。如果你想看电影 回溯,请设置CG\u上下文\u显示\u回溯环境 变量ImageIO:JPEG空JPEG图像(不支持DNL)


更新:

我不知道,上面的代码有什么问题(除了下面Sulthan提到的初始化-谢谢他)。最后我使用了以下代码(此代码正常工作):


这条线就是问题所在:

CIImage *ciImage = inputImage.CIImage
如果图像不是从
CIImage
初始化的,则它自己的
CIImage
nil
。 更安全的方法是:

CIImage *ciImage = [[CIImage alloc] initWithImage:inputImage];

另外,请确保已从数据中成功加载图像。

图像稍有更改。它处理图像(错误仍然存在-没有JPEG部分),但图像为黑色或充满彩色噪声,outputImage.size.height a width变量为非信度数字(大值或负值)。还有什么问题吗?@Jolinar我猜你的原始图像没有正确加载。是否检查了
inputImage
的大小?是的,如果未执行调整大小,原始图像具有真实的WxH,并且处理正常(有一些颜色校正和JPEG导出)。
CIImage *ciImage = [[CIImage alloc] initWithImage:inputImage];