你可以只在一個單一的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