2013-12-18 2 views
1

Я работаю над приложением для редактирования фотографий, и у меня есть merge two Images one Over another like this.Основной фильтр изображения CISourceOverCompositing не работает должным образом

enter image description here

Я реализовал следующий код сделать так:
Здесь imgedit является фоновым изображением и
imgEdit является UIImageView, содержащего imgedit.

 UIImage *tempImg = [UIImage imageNamed:[NSString stringWithFormat:@"borderImg"]]; 
     CIImage *inputBackgroundImage = [[CIImage alloc] initWithImage:imgedit]; 
     CIImage *inputImage = [[CIImage alloc]initWithImage:tempImg] ; 

     CIFilter *filter = [CIFilter filterWithName:@"CISourceOverCompositing"]; 
     [filter setDefaults]; 
     [filter setValue:inputImage forKey:@"inputImage"]; 
     [filter setValue:inputBackgroundImage forKey:@"inputBackgroundImage"]; 

     CIImage *outputImage1 = [filter valueForKey:@"outputImage"]; 
     CIContext *context = [CIContext contextWithOptions:nil]; 
     imgEdit.image = [UIImage imageWithCGImage:[context createCGImage:outputImage1 fromRect:outputImage1.extent]]; 

Но outputImage я получаю после реализации выше кода является:
enter image description here

Я также попытался размер входного белого кадра изображения, используя следующий код:

 tempImg=[tempImg resizedImageToSize:CGSizeMake(imgEdit.image.size.width,imgEdit.image.size.height)]; 

При использовании вышеуказанного кода изображение будет правильно изменено, но это тоже не работает.

Пожалуйста, помогите мне отсюда.
Ваша ценная помощь будет очень признательна.
Спасибо заранее.

+0

Ваше фоновое изображение прямоугольник портрет и ваша маска изображение квадрат .. На самом деле, что это результат, который вы хотите добиться от этого образа? или я что-то упускаю? –

+0

Похоже, что 'CIContext' изменяет размеры для большего размера изображения. Нарисуйте свой фон с размером изображения вашей маски. для ссылки используйте этот метод 'drawImage: inRect: fromRect:' метод в 'CIContext'. Я не очень разбираюсь в фильтрах. Рад узнать, есть ли у вас вопросы. –

+0

На самом деле я хочу добавить белую рамку, которая показана над фоновым изображением. Дело в том, что фоновое изображение имеет квадратную рамку, тогда это нормально, и я могу получить желаемый результат. но проблема возникает, когда она имеет прямоугольную форму. И много спасибо за ваш быстрый ответ. –

ответ

3

Лучший способ изменить размер выглядит следующим образом:

inputImage = [inputImage imageByApplyingTransform:CGAffineTransformMakeScale(inputBackgroundImage.extent.size.width/inputImage.extent.size.with, inputBackgroundImage.extent.size.height/inputImage.extent.size.height)]; 
+0

Спасибо. Ваш ответ спас мое время. – tausun

Смежные вопросы