Tom Coomer
Tom Coomer

Reputation: 6527

OSX UIGraphicsBeginImageContext

I have an iOS app that I am now creating for Mac OSX. I have the code below that converts the image to a size of 1024 and works out the width based on the aspect ratio of the image. This works on iOS but obviously does not on OSX. I am not sure how to create a PNG representation of the NSImage or what I should be using instead of UIGraphicsBeginImageContext. Any suggestions? Thanks.

        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)

Upvotes: 2

Views: 2149

Answers (2)

ingconti
ingconti

Reputation: 11636

my two cents... a quick extension to draw an image with a partially overlapped image:

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
    }

}

final effect:

enter image description here

Upvotes: 1

Ben Gottlieb
Ben Gottlieb

Reputation: 85522

You can use:

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
}

Upvotes: 3

Related Questions