将两个UIImages并排保存为一个组合图像?

时间:2014-06-02 13:20:15

标签: ios objective-c graphics

Xcode 5,iOS 7

两个并排的UIViews - viewA和viewB。 每个视图都包含一个UIImage - imageA和imageB。 两个图像在视图之间的边界处相遇,因此它们看起来是无缝的:imageAimageB。

如何将两张图像并排保存到单个图像文件中,就好像它们是一张图像一样?

我知道我可以截取屏幕截图,但这会降低分辨率,并且不会考虑可能在屏幕外的部分图像(由于缩放或定位)。

这可能会回答我自己的问题,但我能想到的最好的方法是创建一个新的UIImage(imageC),将其大小考虑到imageA和imageB,然后根据它们的相对位置将图像复制到imageC中。

更简单的方法?

2 个答案:

答案 0 :(得分:1)

在您的界面中使用2个UIImageView,在为每个界面使用UIImagePicker之后,您可以使用以下代码:

    - (IBAction)margeSave:(id)sender{

        //here you get you two different image

        UIImage *bottomImage = self.imageViewPick.image;
        UIImage *image       = self.myImage.image;

        //here  you have to crop each image with the code below
        //using here a crop code and adjust for your Image

        // create a new size for a merged image

        CGSize newSize = CGSizeMake(640, 640);
        UIGraphicsBeginImageContext( newSize );

        [bottomImage drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];

        [myImage drawInRect:CGRectMake(0,0,newSize.width,newSize.height) blendMode:kCGBlendModeNormal alpha:1.0];

        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

        UIGraphicsEndImageContext();

        UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil);

        //option if you are in other view when save
        //[self.navigationController popViewControllerAnimated:YES];


    }

您可以整合此代码以裁剪图像:

在InterfaceBuilder中使用2部分图像进行挑选,使用您想要的特定尺寸,例如在iPhone上使用2 UIImageView W:150 H:300总计300x300并使用尺寸裁剪图像

CGRect clippedRect  = CGRectMake(self.view.frame.origin.x+91, self.view.frame.origin.y, self.view.frame.size.width-91*2, self.view.frame.size.height-220);
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], clippedRect);
UIImage *imageCrop   = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);

希望这能帮到你

答案 1 :(得分:0)

如果您确实想将图像作为单个图像保存到文件,请查看此帖子here。您将需要图形上下文和所有这些东西。只需确保将其高度,宽度和位置值适当设置为不重叠。

否则,如果您只是想在内存中执行此操作,请创建一个包含两个图像尺寸的UIView,并将UIImageViews添加到此UIView中。务必正确设置框架

UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
[container addSubview:image1];
[container addSubview:image2];
image1.frame = CGRectMake(0, 0, 150, 300);
image2.frame = CGRectMake(150, 0, 150, 300);

然后只需移动容器或任何你想做的事情。