iOS 截屏,截取長圖,圖片拼接

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;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容