Использование CoreImage для фильтрации изображения приводит к повороту изображения - PullRequest
8 голосов
/ 10 ноября 2011

Спасибо за чтение.

Я пытаюсь использовать CoreImage в iOS 5, чтобы изменить внешний вид изображения.Проблема заключается в том, что существующее изображение теряет свою информацию об ориентации во время процесса и в конечном итоге поворачивается на 90 градусов.

Вот код:

CIContext *context = [CIContext contextWithOptions:nil];
CIImage *img = [CIImage imageWithCGImage:imageView.image.CGImage];
CIFilter *adjustFilter = [CIFilter filterWithName:@"CIHighlightShadowAdjust"];

[adjustFilter setDefaults];
[adjustFilter setValue:img forKey:kCIInputImageKey];
[adjustFilter setValue:[NSNumber numberWithFloat:0.3] forKey:@"inputShadowAmount"];
CIImage *adjustedImage = [adjustFilter valueForKey:kCIOutputImageKey];
UIImage *newPtImage = [UIImage imageWithCGImage:[context adjustedImage fromRect:adjustedImage.extent]];

imageView.image = newPtImage;

Исходное изображение обычно получается изодин снимок, сделанный камерой, но не всегда.

Надеюсь, что кто-то может помочь.

Роб.

Ответы [ 2 ]

37 голосов
/ 24 ноября 2011

На самом деле решение моей проблемы оказалось довольно простым.Поскольку CGImage теряет ориентацию и масштабные коэффициенты, мне просто нужно было добавить

UIImageOrientation originalOrientation = imageView.image.imageOrientation;
CGFloat originalScale = imageView.image.scale;

в начале кода, а затем использовать это вместо [UIImage imageWithCGImage:]

    UIImage *newPtImage = [UIImage imageWithCGImage:img2 scale:originalScale orientation:originalOrientation];

Спасибо запредложения тоже.

2 голосов
/ 22 ноября 2011

Посмотрите на этот ответ https://stackoverflow.com/q/538064/871102

Вы можете решить свою проблему, передав изображение методом предыдущего ответа. Так что вместо:

CIImage *img = [CIImage imageWithCGImage:imageView.image.CGImage];

запись:

UIImage *fixedImage = [self scaleAndRotateImage:imageView.image];
CIImage *img = [CIImage imageWithCGImage:fixedImage.CGImage];

UPDATE:

Здесь есть более элегантный ответ без масштабирования изображения: iOS UIImagePickerController - ориентация изображения результата после загрузки .

...