如何将UIImage和UILabel结合成一个图像并保存

我有2 UILabels和2图像,我需要合并成一个单一的UIImage保存。

我知道我可以用屏幕截图来做到这一点,但是我的主要形象是圆形的,所以如果我直接的话,它仍然会显示出锋利的边缘。

我可以这样做来结合图像:

//CGSize newImageSize = CGSizeMake(cropImage.frame.size.width, cropImage.frame.size.height); CGSize newImageSize = CGSizeMake(480, 320); NSLog(@"CGSize %@",NSStringFromCGSize(newImageSize)); UIGraphicsBeginImageContextWithOptions(newImageSize, NO, 0.0); //retina res [self.viewForImg.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); NSData *imgData = UIImageJPEGRepresentation(image, 0.9); //UIImagePNGRepresentation ( image ); // get JPEG representation UIImage * imagePNG = [UIImage imageWithData:imgData]; // wrap UIImage around PNG representation UIGraphicsEndImageContext(); return imagePNG; 

但不知道如何添加在UILabel中。

任何答复非常感谢。

使用[myLabel.layer renderInContext:UIGraphicsGetCurrentContext()]; 在当前的情况下绘制。

例如: –

  UIGraphicsBeginImageContextWithOptions(newImageSize, NO, 0.0); //retina res [self.viewForImg.layer renderInContext:UIGraphicsGetCurrentContext()]; [myLabel.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 

根据你的意见,如果你想在一个特定的框架绘制这样做,如下所示,

 [myLabel drawTextInRect:CGRectMake(0.0f, 0.0f, 100.0f, 50.0f)]; 

如果你想为背景着色,试试这个,

 CGRect drawRect = CGRectMake(rect.origin.x, rect.origin.y,rect.size.width, rect.size.height); CGContextSetRGBFillColor(context, 100.0f/255.0f, 100.0f/255.0f, 100.0f/255.0f, 1.0f); CGContextFillRect(context, drawRect); 

或者你可以检查这个问题设置CGContext透明背景 。

 UIEdgeInsets insets = UIEdgeInsetsMake(1, 1, 1, 1); CGSize imageSizeWithBorder = CGSizeMake(view.frame.size.width + insets.left + insets.right, view.frame.size.height + insets.top + insets.bottom); UIGraphicsBeginImageContextWithOptions(imageSizeWithBorder, UIEdgeInsetsEqualToEdgeInsets(insets, UIEdgeInsetsZero), 0); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextClipToRect(context, (CGRect){{insets.left, insets.top}, view.frame.size}); CGContextTranslateCTM(context, -view.frame.origin.x + insets.left, -view.frame.origin.y + insets.top); [view.layer renderInContext:context]; UIImage *viewCopy = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 

尝试这个!

  UIGraphicsBeginImageContextWithOptions(newImageSize, NO, scale); //retina res [COGI.layer renderInContext:UIGraphicsGetCurrentContext()]; [COGI.image drawInRect:CGRectMake(0, 0, 248, 290)]; [iconI.image drawInRect:CGRectMake(4, 20, 240, 240)]; [stampI.image drawInRect:CGRectMake(0, -5, 248, 290)]; [headerL drawTextInRect:CGRectMake(14, 35, 220, 40)]; [detailL drawTextInRect:CGRectMake(16, 200, 215, 65)]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); [[UIColor redColor] set]; NSData *imgData = UIImageJPEGRepresentation(image, 1.0); //UIImagePNGRepresentation ( image ); // get JPEG representation UIImage * imagePNG = [UIImage imageWithData:imgData]; // wrap UIImage around PNG representation UIGraphicsEndImageContext(); return imagePNG;