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
}

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...