簡體   English   中英

Objective-C (iOS),使用 CIFilter 調整圖像大小會產生無效輸出 (UIImage)

[英]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初始化的,那么它自己的CIImagenil 更安全的方法是:

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

此外,請確保已從您的數據成功加載圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM