你可以只在一个单一的UIView排列在一起(我想即使关屏,但我还没有选中) - 然后只用QuartzCode说的UIView转换为一个UIImage:
UIGraphicsBeginImageContext(myView.bounds.size);
[myView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
然后把它转换成一种格式 - 像PNG在立场:
NSData *imageData = UIImagePNGRepresentation(image);
然后发送不应该太难。
编辑 这里是一个扩展的例子,你还可以看到3张图片 - 当然,你可以使用Interface Builder与出路,而不是写这一切的 - 但你可以复制粘贴此尝试:
UIImageView *imgView1, *imgView2, *imgView3;
imgView1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1"]];
imgView2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image2"]];
imgView3 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image3"]];
imgView1.frame = CGRectMake(0, 0, 50, 50);
imgView2.frame = CGRectMake(50, 50, 100, 100);
imgView3.frame = CGRectMake(100, 100, 200, 200);
[referenceView addSubview:imgView1];
[referenceView addSubview:imgView2];
[referenceView addSubview:imgView3];
UIGraphicsBeginImageContext(referenceView.bounds.size);
[referenceView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
resultView = [[UIImageView alloc] initWithImage:finalImage];
resultView.frame = CGRectMake(0, 0, 320, 480);
[self.view addSubview:resultView];
referenceView.hidden = YES;
注意 我已经检查过,当你调用renderInContext的时候UIView必须是可绘制/可见的(它可以不在屏幕上,但它不能被隐藏或者alpha = 0,因为那样它将被渲染为不可见)。因此,要么把它关闭屏幕或立即绘制
检查了这一点 - http://stackoverflow.com/questions/5299452/how-can-i-crop-an-image-with-mask-and-combine-it-with-another-image-background –
它是基于opengl的。我会pref是任何其他的选择。 –
我贴你将工作作为手机可以在内存中处理多达图像的代码 - 见我与扩展代码 – shein