如何合并图像并保持原始转换

时间:2012-08-23 11:16:16

标签: ios image-processing

我遇到一个简单的iPad图像拼贴应用程序的问题。我有一个UIImageView,可以拖放不同的UIImageViews。拖动的视图可以旋转和拉伸。当用户完成图像编辑后,我将合并所有图像到最终图像上。我的解决方案是使用UIGraphics并绘制大图像,然后遍历所有子视图并在上下文中绘制它们:

- (UIImage*)mergeImages
{
    CGSize imageSize = imageView.frame.size;
    UIGraphicsBeginImageContext(imageSize);

    [imageView.image drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];

    [[imageView subviews] enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) {

        UIImage *imageOriginal = ((UIImageView*)object).image;
        CGRect rect = ((UIImageView*)object).frame;

        UIImage *imageToAdd = [self scaleImage:imageOriginal :rect.size];

        // Find the w/h ratioes
        float widthRatio = rect.size.width / imageOriginal.size.width;
        float heightRatio = rect.size.height / imageOriginal.size.height;

        // Calculate point to draw at
        CGPoint pointToDrawAt;
        if (widthRatio > heightRatio)
            pointToDrawAt = CGPointMake(rect.origin.x + (rect.size.width / 2) - (imageToAdd.size.width / 2), rect.origin.y);
        else
            pointToDrawAt = CGPointMake(rect.origin.x, rect.origin.y + (rect.size.width / 2) - (imageToAdd.size.height / 2));

        [imageToAdd drawAtPoint:pointToDrawAt];

    }];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();    

    // Save image in photogalery
    UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil);

    return newImage;
}

只要图像不旋转,上述操作就会产生罚款。所以我的问题是:

有没有办法可以从子视图中找到旋转角度,还是我必须将UIView子类化并使其成为属性?或者是否有另一种方法可以合并图像并获得绘图特定的属性,如角度和滤镜?

如果我可以提供更多代码或其他任何评论。并提前感谢:)

1 个答案:

答案 0 :(得分:0)

UIImages有一个名为“imageOrientation”的属性,可以查询。一旦你知道了这一点,就可以将CGAffineTransform应用到上下文中,以便在你看到它时渲染图像。最近有一篇帖子 - 在过去几天 - 如果你搜索'CGAffineTransform',你应该能够找到它(或类似的帖子)并看看它是如何完成的。