Как перевернуть изображение по горизонтали, чтобы сохранить перевёрнутый в фотоальбом? - PullRequest
0 голосов
/ 16 октября 2018

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

myImage?.withHorizontallyFlippedOrientation()

Примечание. Я не пытаюсь перевернуть UIImageView, я пытаюсь перевернуть изображение и сохранить его в новой переменной изображения и назначитьизображение из этой переменной изображения в UIImageView.

Полный код IBAction:

@IBAction func horizontalFlipBtnPressed(_ sender: Any) {
    if myImageView.image != nil{
    let image = myImageView.image
    tempImage.append((image?.withHorizontallyFlippedOrientation())!)

    myImageView.image = tempImage.last



    }
    else{
        print ("there is no image selected")
    }
}

Код для сохранения в Фотоальбоме:

if myImageView.image != nil{
        var image = myImageView.image
        let imageData = image!.pngData()
        let compressedImage = UIImage(data: imageData!)
        UIImageWriteToSavedPhotosAlbum(compressedImage!, nil, nil, nil)
        let alert = UIAlertController(title: "Saved", message: "Your image has been saved!", preferredStyle: .alert)
        let okAction = UIAlertAction(title: "Ok", style: .default, handler: nil)
        alert.addAction(okAction)
        self.present(alert, animated: true,completion: nil)

    }

1 Ответ

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

Из документов Apple:

Ориентация изображения влияет на способ отображения данных изображения при рисовании.

Так что это на самом деле не влияет на данные изображения.

Если вы просто хотите «перевернуть ориентацию» в метаданных изображения, вы можете использовать .withHorizontallyFlippedOrientation(), а затем просто сохранить изображение (вместо преобразования его в png-данные и обратно).

Если вы действительно хотите, чтобы данные изображения (пиксели) были перевернуты, вам нужно нарисовать их перевернутыми, а затем сохранить это изображение.Один из способов сделать это:

func flipImageLeftRight(_ image: UIImage) -> UIImage? {

    UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale)
    let context = UIGraphicsGetCurrentContext()!
    context.translateBy(x: image.size.width, y: image.size.height)
    context.scaleBy(x: -image.scale, y: -image.scale)

    context.draw(image.cgImage!, in: CGRect(origin:CGPoint.zero, size: image.size))

    let newImage = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    return newImage
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...