Я пытаюсь изменить размер изображения JPEG в Objective-C (iOS). Входным файлом является 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)
Update:
Я не знаю, что случилось с выше код (за исключением инициализации упомянутой 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);
Немного изменилось. он обрабатывает изображение (ошибка все еще присутствует - без части JPEG), но изображение черное или заполнено цветовым шумом, outputImage.size.height - переменные ширины - это числа бессмысленности (большие или отрицательные значения). Что-нибудь еще, что может быть не так с этим? – Jolinar
@Jolinar Я предполагаю, что исходное изображение загружено неправильно. Вы проверили размер 'inputImage'? – Sulthan
Да, исходное изображение имеет реальный WxH и обрабатывается нормально (есть некоторая цветовая коррекция и экспорт JPEG), если размер не выполняется. – Jolinar