Снимок экрана с надписью и прозрачным фоном в iOS и загрузите его на сервер - PullRequest
0 голосов
/ 03 октября 2018

Я хочу сделать снимок экрана и создать из него UIImage.Я хочу, чтобы атрибут прозрачности вида был сохранен в моем изображении.Я попробовал этот метод после создания расширения UIImage, но фон не получается прозрачным в результирующем изображении при загрузке на сервер.

Пожалуйста, помогите или укажите мне, если я делаю что-то не так !!Это означает, что полученный png не имел прозрачности.

class func createTransparentImageFrom(label: UILabel, imageSize: CGSize) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(imageSize, false, 2.0)
    let currentView = UIView.init(frame: CGRect(x: 0, y: 0, width: imageSize.width, height: imageSize.height))
    currentView.backgroundColor = UIColor.clear
    currentView.addSubview(label)

    currentView.layer.render(in: UIGraphicsGetCurrentContext()!)
    let img = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return img!
}

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Это было связано с тем, что при рендеринге изображения изображение в формате JPEG / JPG, поэтому нам нужно преобразовать его в png, чтобы получить информацию о слое.

Попробуйте это:

extension UIImage {
 class func createTransparentPNGFrom(label: UILabel, imageSize: CGSize) -> UIImage? {
    UIGraphicsBeginImageContextWithOptions(imageSize, false, 0)
    let currentView = UIView.init(frame: CGRect(x: 0, y: 0, width: imageSize.width, height: imageSize.height))
    currentView.backgroundColor = UIColor.clear
    currentView.addSubview(label)
    currentView.layer.render(in: UIGraphicsGetCurrentContext()!)
    let img = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    guard let newImg = img else {
        return nil
    }
    guard let imageData = UIImagePNGRepresentation(newImg) else {
        return nil
    }
    return UIImage.init(data: imageData)
 }
}
0 голосов
/ 03 октября 2018

Вам нужно установить непрозрачное значение true для прозрачного результата. Расширение UIView Прозрачного скриншота

func screenShot() -> UIImage? {
     UIGraphicsBeginImageContextWithOptions(self.bounds.size, true, UIScreen.main.scale)
     self.layer.render(in: UIGraphicsGetCurrentContext()!)
     let img = UIGraphicsGetImageFromCurrentImageContext()
     UIGraphicsEndImageContext()
     return img
 }
...