ios – Swift:裁剪截图

前端之家收集整理的这篇文章主要介绍了ios – Swift:裁剪截图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有整个屏幕截图,截图,使用以下内容生成
let layer = UIApplication.sharedApplication().keyWindow!.layer
let scale = UIScreen.mainScreen().scale
UIGraphicsBeginImageContextWithOptions(layer.frame.size,false,scale);

layer.renderInContext(UIGraphicsGetCurrentContext())
let screenshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

我想裁剪它,以便不包括标签栏,我尝试使用以下代码

let crop = CGRectMake(0,//"start" at the upper-left corner
self.view.bounds.width,//include half the width of the whole screen
self.view.bounds.height + self.navigationController!.navigationBar.frame.height) //include the height of the navigationBar and the height of view

let cgImage = CGImageCreateWithImageInRect(screenshot.CGImage,crop)
let image: UIImage = UIImage(CGImage: cgImage)!

代码导致图像只显示屏幕的一小部分,一个矩形从屏幕的左上角开始(0,0),并向右延伸不到屏幕宽度的一半,然后向下延伸小于屏幕高度的一半.不过,我想要包括整个屏幕,除了标签栏占用的区域.有没有这种方法来裁剪它?

解决方法

根据这个

The new image is created by
1) adjusting rect to integral bounds by calling CGRectIntegral;
2) intersecting the result with a rectangle with origin (0,0) and size
equal to the size of image;
3) referencing the pixels within the resulting rectangle,treating the
first pixel of the image data as the origin of the image.
If the resulting rectangle is the null rectangle,this function returns
NULL.

If W and H are the width and height of image,respectively,then the
point (0,0) corresponds to the first pixel of the image data; the point
(W-1,0) is the last pixel of the first row of the image data; (0,H-1)
is the first pixel of the last row of the image data; and (W-1,H-1) is
the last pixel of the last row of the image data.

你需要有这样的裁剪功能.您可能需要调整bottomBarHeight的计算

func takeScreenshot(sender: AnyObject) {
    let layer = UIApplication.sharedApplication().keyWindow!.layer
    let scale = UIScreen.mainScreen().scale
    UIGraphicsBeginImageContextWithOptions(layer.frame.size,scale);

    layer.renderInContext(UIGraphicsGetCurrentContext())
    let screenshot = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    let croppedImage = self.cropImage(screenshot)
}

func cropImage(screenshot: UIImage) -> UIImage {
    let scale = screenshot.scale
    let imgSize = screenshot.size
    let screenHeight = UIScreen.mainScreen().applicationFrame.height
    let bound = self.view.bounds.height
    let navHeight = self.navigationController!.navigationBar.frame.height
    let bottomBarHeight = screenHeight - navHeight - bound
    let crop = CGRectMake(0,//"start" at the upper-left corner
        (imgSize.width - 1) * scale,//include half the width of the whole screen
        (imgSize.height - bottomBarHeight - 1) * scale) //include the height of the navigationBar and the height of view

    let cgImage = CGImageCreateWithImageInRect(screenshot.CGImage,crop)
    let image: UIImage = UIImage(CGImage: cgImage)!
    return image
}
原文链接:https://www.f2er.com/iOS/329881.html

猜你在找的iOS相关文章