我试图了解如何处理图像,以便对依赖于此的事物进行进一步的构想。
由于出现了意外的结果(对我来说很明显),我只是在尝试通过一个基本示例了解NSImage
和draw(in:from:operation:fraction:)
方法的工作方式:仅创建jpg文件的副本。
假设我有一张尺寸为2000 * 1000(像素)的jpg照片(在取景器中看到了此图片)
我在操场上有以下代码:
let originalSize = originalImage.size //2000 * 1000
let imageCopy = NSImage(size: originalSize)
let destRect = CGRect(origin: .zero, size: originalSize)
imageCopy.lockFocus()
originalImage.draw(in: destRect, from: .zero, operation: .copy, fraction: 1)
imageCopy.unlockFocus()
imageCopy // I get an image that is 4000 * 2000...
imageCopy.jpgWrite(to: newImagePath) // doesn't really matter the implementation, but looking at the file in finder the size matches this (twice bigger).
(size / 2)是一个辅助方法,可以将宽度和高度都乘以2。
例如,如果我尝试:
let originalSize = originalImage.size / 2 //1000 * 500
let imageCopy = NSImage(size: originalSize)
let destRect = CGRect(origin: .zero, size: originalSize)
imageCopy.lockFocus()
originalImage.draw(in: destRect, from: .zero, operation: .copy, fraction: 1)
imageCopy.unlockFocus()
imageCopy // I get an image that is 2000 * 1000... ok....
imageCopy.jpgWrite(to: newImagePath)
我有适当的尺寸,但是渲染的图像是原始图像的四分之一(一半宽度和一半高度)。
我真的想精确控制输出图像的大小,因为我依赖于此。我不知道我尝试了多少方法,总是得到意想不到的结果。
注意:我知道可能还有其他方法可以处理这种特定情况,例如复制文件本身,但这只是我进一步进入实际需要的一种方式。
谢谢