1.截取制定范圍(非長圖)
- (UIImage *)screenShotWithSize(CGSize *)size {
UIImage* image = nil;
/*
*UIGraphicsBeginImageContextWithOptions有三個參數
*size bitmap上下文的大小,就是生成圖片的size
*opaque 是否不透明,當指定為YES的時候圖片的質量會比較好
*scale 縮放比例,指定為0.0表示使用手機主屏幕的縮放比例
*/
UIGraphicsBeginImageContextWithOptions(size, YES, 0.0);
//此處我截取的是TableView的header.
[self.tableHeaderView.layer renderInContext: UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if (image != nil) {
return image;
}else {
return nil;
}
}
2.截取長圖,如TableView,CollectionView
- (UIImage *)screenShot {
UIImage* image = nil;
UIGraphicsBeginImageContextWithOptions(self.collectionView.contentSize, YES, 0.0);
//保存collectionView當前的偏移量
CGPoint savedContentOffset = self.collectionView.contentOffset;
CGRect saveFrame = self.collectionView.frame;
//將collectionView的偏移量設置為(0,0)
self.collectionView.contentOffset = CGPointZero;
self.collectionView.frame = CGRectMake(0, 0, self.collectionView.contentSize.width, self.collectionView.contentSize.height);
//在當前上下文中渲染出collectionView
[self.collectionView.layer renderInContext: UIGraphicsGetCurrentContext()];
//截取當前上下文生成Image
image = UIGraphicsGetImageFromCurrentImageContext();
//恢復collectionView的偏移量
self.collectionView.contentOffset = savedContentOffset;
self.collectionView.frame = saveFrame;
UIGraphicsEndImageContext();
if (image != nil) {
return image;
}else {
return nil;
}
}
3.圖片拼接
將兩張圖片拼接在一起,第二張圖片拼接在第一張圖的下面。
/*masterImage 主圖片,生成的圖片的寬度為masterImage的寬度
*slaveImage 從圖片,拼接在masterImage的下面
*/
- (UIImage *)addSlaveImage:(UIImage *)slaveImage toMasterImage:(UIImage *)masterImage {
CGSize size;
size.width = masterImage.size.width;
size.height = masterImage.size.height + slaveImage.size.height;
UIGraphicsBeginImageContextWithOptions(size, YES, 0.0);
//Draw masterImage
[masterImage drawInRect:CGRectMake(0, 0, masterImage.size.width, masterImage.size.height)];
//Draw slaveImage
[slaveImage drawInRect:CGRectMake(0, masterImage.size.height, masterImage.size.width, slaveImage.size.height)];
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultImage;
}