如何截取屏幕截图并裁剪出白色空间?

时间:2015-12-11 19:39:53

标签: ios swift uiimageview screenshot uigraphicscontext

我有一个应用程序,允许用户将照片添加到他们的照片,并保存它像贴纸应用程序。我现在设置了一个屏幕截图,但我面临的问题是它需要整个UIView的屏幕截图,因此有很多空白区域,UIButtons可见最终保存的照片在相机胶卷中。

如何拍摄从应用中裁剪出白色空间的屏幕截图?

这就是我现在所拥有的......

 UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, 0);
    self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
    var image: UIImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
    self.savedImageAlert()
    self.dismissViewControllerAnimated(true, completion: nil)

我已经玩过使界限等于UIImageview这个名为userImageView但是这使我的照片失真并且仍然在照片的顶部而不是顶部和底部有很多空白区域。

我是Swift的新手并且很难使用 CG / UIGraphics 这些东西,所以任何帮助都会非常感激...我花了几个小时研究这个并且越来越多了困惑!

注意/更新:我已将代码更改为以下内容:

//我在两个函数之外定义了myView,以便我可以在函数和IBAction函数中引用myView

   let myView = UIView()
func imageWithView(myView:UIView)->UIImage{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0.0)
    view.layer.renderInContext(UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image
}

@IBAction func mergeAndSaveImage(sender: AnyObject) {
    let newImage = imageWithView(myView)
    UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil)
    self.savedImageAlert()
    self.dismissViewControllerAnimated(true, completion: nil)

在我的故事板中,我设置了一个新的UIView,将其重命名并在文档大纲中拖动了我的两个UIImageViews

我仍然无法使其工作,当我保存图像时,它会使用空格和UIbuttons保存整个屏幕。

首先,我不希望底特律笔记本的图像如此之小,故事板上的图像要大得多,但是当我运行应用程序时,它会在uiview中变小。

其次,代码只保存整个屏幕的图像......我只想将包含两个uiimages的UIView保存为图像。

这是它节省的......

Here's what the code saves...

1 个答案:

答案 0 :(得分:0)

如果您可以设法在某些UIView内添加照片,那么此方法可以为您提供帮助。您只需在此处传递UIView,对于该特定UIView,只会返回UIImage个对象。它不会占用其他屏幕区域,只会将UIView作为参数传递。

所以层次结构将是这样的。 UIImageView中会有一个UIView,并且您的贴纸所需的所有其他内容都会出现在同一个UIView中,这些内容将通过以下方法传递,以便仅检索特定的UIImage。

可以在任何地方轻松保存或检索UIImage

//function to convert the given UIView into an UIImage
func imageWithView(view:UIView)->UIImage{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0.0)
    view.layer.renderInContext(UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image
}

以及稍后您可以只在任何地方保存该图像。

UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)

编辑:
点击按钮执行以下操作:

@IBAction func buttonAction(sender: AnyObject) {
    // you will get an UIImage object
    let image = imageWithView(yourCustomView)

    //Then save your image
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}

这是截图

enter image description here