Смешайте два изображения вместе

Я пытаюсь объединить два изображения в финальное изображение, но, к сожалению, не могу найти способ сделать это. Как я могу объединить две фотографии, как показано ниже?

введите здесь описание изображения

введите здесь описание изображения

введите здесь описание изображения


person Sagar Vaholiya    schedule 08.04.2016    source источник
comment
Это руководство может помочь raywenderlich.com/ 69855/   -  person Prashant Tukadiya    schedule 08.04.2016
comment
Как насчет использования фотошопа?   -  person Khanh Nguyen    schedule 08.04.2016


Ответы (4)


Еще проще: вы можете использовать CISwipeTransition и установите inputTime на 0,5,

Саймон

person Simon Gladman    schedule 08.04.2016
comment
Что мне делать с CISwipeTransition? у вас есть пример? - person Sagar Vaholiya; 09.04.2016
comment
Переход смахиванием принимает два изображения — inputImage и inputTargetImage. Он в первую очередь предназначен для перехода между изображениями в приложениях, таких как слайд-шоу, но, установив для inputTime значение 0,5, он дает разделенный экран для двух изображений. Боюсь, я не говорю на ObjC, но у меня есть демонстрационное приложение Swift для изучения переходов CI: github .com/FlexMonkey/CoreImageTransitionExplorer - person Simon Gladman; 09.04.2016
comment
Вот так. Но мне нужно только настроить градиент смешивания между изображениями, мне не нужен переход. после этого я должен нарисовать эти два изображения в одно изображение. - person Sagar Vaholiya; 11.04.2016

Если вы хотите использовать базовую графику, вы можете создать маску градиента, нарисовать первое изображение, применить градиент в качестве обтравочной маски, а затем нарисовать второе изображение. Таким образом, первое изображение не обрезается, а второе обрезается по градиенту:

- (UIImage *)imageCombiningImage:(UIImage *)image1 withImage:(UIImage *)image2 {
    CGRect rect = CGRectMake(0, 0, image1.size.width, image1.size.height);

    UIGraphicsBeginImageContextWithOptions(image1.size, TRUE, image1.scale);

    // create gradient

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

    CGFloat locations[] = { 0.45, 0.55 };  // gradient goes from 45% to 55% the way across the image
    CGFloat components[] = {
        1.0, 1.0, 1.0, 1.0,                // Start color ... white
        0.0, 0.0, 0.0, 0.0                 // End color   ... clear
    };

    CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, components, locations, 2);

    // create mask from that gradient

    CGContextRef context = UIGraphicsGetCurrentContext();        
    CGContextDrawLinearGradient(context, gradient, CGPointMake(0, 0), CGPointMake(image1.size.width, 0), kCGGradientDrawsAfterEndLocation);
    CGImageRef gradientImageRef = CGBitmapContextCreateImage(context);

    // draw the first image

    [image1 drawInRect:rect];

    // clip subsequent drawing to the gradient mask we just created

    CGContextClipToMask(context, rect, gradientImageRef);

    // draw the second image

    [image2 drawInRect:rect];

    // extract the image

    UIImage *combinedImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    // clean up

    CGColorSpaceRelease(colorSpace);
    CGGradientRelease(gradient);
    CGImageRelease(gradientImageRef);

    return combinedImage;
}

Это приводит к:

введите здесь описание изображения

person Rob    schedule 09.04.2016

_View1.frame = CGRectMake(0, 0, Width/2, Width);
_View2.frame = CGRectMake(0, 0, Width/2, Width);

    CAGradientLayer *gradientMask = [CAGradientLayer layer];
    gradientMask.frame = self.View2.bounds;
    gradientMask.colors = @[(id)[UIColor whiteColor].CGColor,
                            (id)[UIColor clearColor].CGColor];
    gradientMask.startPoint = CGPointMake(0.5, 0.5);   // start at left middle
    gradientMask.endPoint = CGPointMake(0, 0.5);     // end at right middle
    self.View2.layer.mask = gradientMask;

=> Мне помог этот ответ.

person Sagar Vaholiya    schedule 08.04.2016

person    schedule
comment
Спасибо за помощь @Richard G - person Sagar Vaholiya; 08.04.2016
comment
Это, очевидно, не визуализирует переход градиента между двумя изображениями, а скорее является жестким переходом. - person Rob; 10.04.2016