如何在Swift中将NSImage写入JPEG文件?

hen*_*ter 5 cocoa nsimage swift

一个快速的问题.不是Obj-C问题.请不要将其标记为重复

我正在尝试编写一个在OS X上生成JPEG缩略图的类.我希望我有一些合理的东西形成缩小的NSImage,但我很难将JPEG文件写入磁盘.

class ImageThumbnail {
    let size = CGSize(width: 128, height: 128)
    var originalPath = ""

    init(originalPath: String){
        self.originalPath = originalPath
    }

    func generateThumbnail() {
        let url = NSURL(fileURLWithPath: originalPath)

        if let imageSource = CGImageSourceCreateWithURL(url, nil) {
            let options: [NSString: NSObject] = [
                kCGImageSourceThumbnailMaxPixelSize: max(size.width, size.height) / 2.0,
                kCGImageSourceCreateThumbnailFromImageAlways: true
            ]

            let cgImage = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, options)
            let scaledImage = cgImage.flatMap { NSImage(CGImage: $0, size: size) }

            // How do I write scaledImage to a JPEG file?
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法示例: ImageThumbail(originalPath: "/path/to/original").generateThumbnail()

JAL*_*JAL 6

首先,您需要获取图像的位图表示,获取该图像的JPEG表示(或您想要的任何格式),然后将二进制数据写入文件:

if let bits = scaledImage?.representations.first as? NSBitmapImageRep {
    let data = bits.representationUsingType(.NSJPEGFileType, properties: [:])
    data?.writeToFile("/path/myImage.jpg", atomically: false)
}
Run Code Online (Sandbox Code Playgroud)

NSBitmapImageFileType 为您提供表示选择:

public enum NSBitmapImageFileType : UInt {

    case NSTIFFFileType
    case NSBMPFileType
    case NSGIFFileType
    case NSJPEGFileType
    case NSPNGFileType
    case NSJPEG2000FileType
}
Run Code Online (Sandbox Code Playgroud)