前言
前段时间,由于公司接了一个书法的项目,里面迭代的内容涉及到了这个整图保存相册的功能.但是自己之前也没有真正的了解过这个具体是什么实现的,于是自己网上就搜索了很多关于这个方面的资料看看,才知道,原来这是画布就可以实现的了.好了,闲言少叙
具体实现步骤
- 首先很简单啊,就是要把你保存的图片或者字体存放在一个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;
}
}