Изменить разрешение и размер изображения с помощью какао /osx/swift (без мобильных приложений)
Я пытаюсь программно изменить размер и разрешение изображения, после чего сохраняю это изображение.
Размер изображения в imageView меняется, но когда я смотрю на мой файл "file3.png", он всегда имеет исходное разрешение 640x1142.
Я погуглил вокруг, но не могу найти решение. Я пытаюсь перерисовать изображение. Но, возможно, это неправильная стратегия.
Спасибо
@IBAction func pickOneImageBtn(sender: AnyObject) {
//load image from path
pickedImage.image = loadImageFromPath(fileInDocumentsDirectory("Angebote.png"))
let newSize = NSSize(width: 10, height: 10)
if let image = pickedImage.image {
print("found image")
//cast to CGImage
var imageRect:CGRect = CGRectMake(0, 0, image.size.width, image.size.height)
let imageRef = image.CGImageForProposedRect(&imageRect, context: nil, hints: nil)
if let imageRefExists = imageRef {
print("Cast to CGImage worked \(imageRefExists)")
}
//redraw to NSImage with new size
let imageWithNewSize = NSImage(CGImage: imageRef!, size: newSize)
//save on disk
let imgData: NSData! = imageWithNewSize.TIFFRepresentation!
let bitmap: NSBitmapImageRep! = NSBitmapImageRep(data: imgData!)
if let pngCoverImage = bitmap!.representationUsingType(NSBitmapImageFileType.NSPNGFileType, properties: [:]) {
pngCoverImage.writeToFile("/...correctpath.../imageSourceForResize/file3.png", atomically: false)
print("saved new image")
}
//the size is smaller
pickedImage.image = imageWithNewSize
}
}
2 ответа
+ Изменить
let imgData: NSData! = pickedImage.image!.TIFFRepresentation!
в
let imgData: NSData! = imageWithNewSize.TIFFRepresentation!
Я попытался изменить размер приложения NSImage для Mac, и вот рабочая функция для изменения размера изображения, написанного в swift.
func resize(image: NSImage, w: Int, h: Int) -> NSImage
{
let destSize = NSMakeSize(CGFloat(w), CGFloat(h))
let newImage = NSImage(size: destSize)
newImage.lockFocus()
image.drawInRect(NSMakeRect(0, 0, destSize.width, destSize.height), fromRect: NSZeroRect, operation: NSCompositingOperation.CompositeCopy, fraction: 1.0)
newImage.unlockFocus()
newImage.size = destSize
return NSImage(data: newImage.TIFFRepresentation!)!
}
Вы должны передать 3 параметра для вызова этой функции, т.е. NSImage, width, height, и эта функция вернет измененное изображение.
targetimage = resize(source, w: Int(targetwidth), h: Int(targetheight))