iOS开发之CGContextRef(多张图片保存为一张)

    xiaoxiao2021-04-11  34

    前言

    前段时间,由于公司接了一个书法的项目,里面迭代的内容涉及到了这个整图保存相册的功能.但是自己之前也没有真正的了解过这个具体是什么实现的,于是自己网上就搜索了很多关于这个方面的资料看看,才知道,原来这是画布就可以实现的了.好了,闲言少叙

    具体实现步骤

    首先很简单啊,就是要把你保存的图片或者字体存放在一个NSArray中,当然这个数组可能会是两种类型,这个定义模型的时候需要确定好其次就是开始或整张图片的背景,这背景可以是默认的白底,也可以是你想要的任何一张图片,只要的画之前把这个定义好就行接下来的画就是将你要的图片一张一张画到这个背景图片里面去了,这一步很重要.下面就直接上代码吧.

    代码实现

    - (BOOL)mergedImageWithImageArray:(NSArray *)imgArray { UIEdgeInsets edgeInsets = UIEdgeInsetsMake(10, 10, 10, 10);//背景图的上下左右间隔 CGFloat imageLie = 1;//每张图片的大列间隔 CGFloat imageHang = 1;//每张图片的行间隔 //单个图片的宽高 CGFloat image_width = (CGRectGetWidth(self.view.bounds) - 20)/self.index_lie; //背景图的宽度 CGFloat bgImgWidth = self.index_lie*image_width + (self.index_lie - 1) *imageLie + edgeInsets.left + edgeInsets.right; //背景图高度 CGFloat bgImgHeight = self.index_hang*image_width + (self.index_hang -1) * imageHang + edgeInsets.top + edgeInsets.bottom; //背景图的大小 UIGraphicsBeginImageContext(CGSizeMake(bgImgWidth, bgImgHeight)); for (int i = 0; i < imgArray.count; i++) { id data = imgArray[i]; int lang = i % _index_hang; int lie = i / _index_hang; //横着画 // CGFloat x = edgeInsets.left + lie * (image_width + imageLie); // CGFloat y = edgeInsets.top + lang * (image_width + imageHang); //竖着画 CGFloat x = (bgImgWidth - image_width -lie - (image_width + imageLie) * lie)-edgeInsets.left; CGFloat y = edgeInsets.top+(image_width+imageHang)*lang; if ([data isKindOfClass:[UIImage class]]) { UIImage *image = imgArray[i]; [image drawInRect:CGRectMake(x, y, image_width, image_width)]; } else if ([data isKindOfClass:[NSString class]]) { NSString *text = imgArray[i]; CGFloat textSize = image_width/2; UIFont *font = [UIFont systemFontOfSize:textSize]; NSMutableParagraphStyle* paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; paragraphStyle.alignment = NSTextAlignmentCenter;//居中显示 paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping; NSDictionary* attribute = @{ NSForegroundColorAttributeName:[UIColor blackColor],//设置文字颜色 NSFontAttributeName:font,//设置文字的字体 NSParagraphStyleAttributeName:paragraphStyle,//设置文字的样式 }; CGFloat textY = y + (image_width-textSize)/2;//文字垂直居中 [text drawInRect:CGRectMake(x, textY, image_width, image_width) withAttributes:attribute]; } } //获取上下文并将图片保存相册 UIImage *newMergeImg = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); if (newMergeImg == nil) { return NO; } else { UIImageWriteToSavedPhotosAlbum(newMergeImg, self, nil, nil); return YES; } }

    最终保存效果

    转载请注明原文地址: https://ju.6miu.com/read-666831.html

    最新回复(0)