2017-02-06 1 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

이 줄 문제입니다 : 나는 (이 코드는 확인을 작동) 끝 부분에 다음 코드를 사용했다. 더 안전한 방법은 다음과 같습니다

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

또한, 이미지 데이터에서 성공적으로로드되었는지 확인하십시오.

+0

조금 변경되었습니다. 이미지를 처리합니다 (오류는 여전히 JPEG 부분 제외). 그러나 이미지가 검은 색이거나 색상 노이즈가있는 경우 outputImage.size.height 너비 변수는 길이가 아닌 숫자 (큰 값 또는 음수 값)입니다. 그것으로 잘못 될 수있는 다른 것은 없습니까? – Jolinar

+0

@ Jolinar 제 생각에 원본 이미지가 제대로로드되지 않았을 것입니다. 'inputImage'의 크기를 확인 했습니까? – Sulthan

+0

예, 원본 이미지는 실제 WxH이며 크기 조정이 수행되지 않으면 ok 처리됩니다 (일부 색 보정 및 JPEG 내보내기가 있음). – Jolinar

관련 문제