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で述べた初期化を除いて(上記のコードで何が間違っている、知らない - 感謝彼はそれのために)。それはCIImage
がnil
ある自分だ
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);
少し変わった。それは画像を処理します(エラーはまだJPEG部分なしであります)が、画像は黒または色ノイズで埋められます。それ以外のことは間違っている可能性がありますか? – Jolinar
@Jolinar私の推測では、元の画像が正しく読み込まれていないということです。 'inputImage'のサイズを確認しましたか? – Sulthan
はい、元のイメージは実際のWxHを持ち、サイズ変更が実行されていない場合、ok(いくつかの色補正とJPEG書き出しがあります)が処理されます。 – Jolinar