2017-02-06 14 views
2

Objective-C(iOS)でJPEG画像のサイズを変更しようとしています。入力はJPGファイルで、出力はUIImageです。Objective-C(iOS)、CIFilterを使用した画像のサイズ変更で出力が無効になる(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で述べた初期化を除いて(上記のコードで何が間違っている、知らない - 感謝彼はそれのために)。それはCIImagenilある自分だ

CIImage *ciImage = inputImage.CIImage 

画像がCIImageから初期化されていない場合:

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); 

答えて

1

この行が問題である:私は(このコードは、[OK]を作品)最後に次のコードを使用していました。 より安全なアプローチは、次のとおりです。

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

また、画像はお使いのデータから正常にロードされたことを確認してください。

+0

少し変わった。それは画像を処理します(エラーはまだJPEG部分なしであります)が、画像は黒または色ノイズで埋められます。それ以外のことは間違っている可能性がありますか? – Jolinar

+0

@Jolinar私の推測では、元の画像が正しく読み込まれていないということです。 'inputImage'のサイズを確認しましたか? – Sulthan

+0

はい、元のイメージは実際のWxHを持ち、サイズ変更が実行されていない場合、ok(いくつかの色補正とJPEG書き出しがあります)が処理されます。 – Jolinar