[英]Objective-C (iOS), Image resizing using CIFilter produces invalid output (UIImage)
我正在嘗試在 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);
這一行是問題:
CIImage *ciImage = inputImage.CIImage
如果圖像不是從CIImage
初始化的,那么它自己的CIImage
是nil
。 更安全的方法是:
CIImage *ciImage = [[CIImage alloc] initWithImage:inputImage];
此外,請確保已從您的數據成功加載圖像。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.