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 부분 제외). 그러나 이미지가 검은 색이거나 색상 노이즈가있는 경우 outputImage.size.height 너비 변수는 길이가 아닌 숫자 (큰 값 또는 음수 값)입니다. 그것으로 잘못 될 수있는 다른 것은 없습니까? – Jolinar
@ Jolinar 제 생각에 원본 이미지가 제대로로드되지 않았을 것입니다. 'inputImage'의 크기를 확인 했습니까? – Sulthan
예, 원본 이미지는 실제 WxH이며 크기 조정이 수행되지 않으면 ok 처리됩니다 (일부 색 보정 및 JPEG 내보내기가 있음). – Jolinar