OSX UIGraphicsBeginImageContext

У меня есть приложение для iOS, которое я сейчас создаю для Mac OSX. У меня есть приведенный ниже код, который преобразует изображение в размер 1024 и определяет ширину на основе соотношения сторон изображения. Это работает на iOS, но, очевидно, не работает на OSX. Я не уверен, как создать PNG-представление NSImage или что мне следует использовать вместо UIGraphicsBeginImageContext. Какие-либо предложения? Спасибо.

        var image = myImageView.image

        let imageData = UIImagePNGRepresentation(image)
        let imageWidth = image?.size.width
        let calculationNumber:CGFloat = imageWidth! / 1024.0

        let imageHeight = image?.size.height
        let newImageHeight = imageHeight! / calculationNumber

        UIGraphicsBeginImageContext(CGSizeMake(1024.0, newImageHeight))
        image?.drawInRect(CGRectMake(0, 0, 1024.0, newImageHeight))
        var resizedImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        let imageData = UIImagePNGRepresentation(resizedImage)

        let theImageData:NSData = UIImagePNGRepresentation(resizedImage)
        imageFile = PFFile(data: theImageData)

person Tom Coomer    schedule 30.03.2015    source источник


Ответы (2)


Вы можете использовать:

let image = NSImage(size: newSize)
image.lockFocus()
//draw your stuff here
image.unlockFocus()
if let data = image?.TIFFRepresentation {
    let imageRep = NSBitmapImageRep(data: data)
    let imageData = imageRep?.representationUsingType(NSBitmapImageFileType.NSPNGFileType, properties: [:])
    //do something with your PNG data here
}
person Ben Gottlieb    schedule 03.08.2015

мои два цента... быстрое расширение для рисования изображения с частично перекрывающимся изображением:

extension NSImage {

    func mergeWith(anotherImage: NSImage) -> NSImage {

        self.lockFocus()
        //draw your stuff here

        self.draw(in: CGRect(origin: .zero, size: size))
        let frame2 = CGRect(x: 4, y: 4, width: size.width/3, height: size.height/3)
        anotherImage.draw(in: frame2)

        self.unlockFocus()
        return self
    }

}

окончательный эффект:

введите здесь описание изображения

person ingconti    schedule 13.03.2019