2016-10-15 17 views
1

イメージをサイズ変更して保存するために、これらの関数を一緒に使用しました。しかし、画像のサイズを適切に変更していないようです.50x50の画像が100x100として保存されるため、150x150の画像がサイズ変更されようとしました。何が原因なのか?イメージのサイズ変更とファイルへの保存

extension NSImage { 
    @discardableResult 
    func saveAsPNG(url: URL) -> Bool { 
     guard let tiffData = self.tiffRepresentation else { 
      print("failed to get tiffRepresentation. url: \(url)") 
      return false 
     } 
     let imageRep = NSBitmapImageRep(data: tiffData) 
     guard let imageData = imageRep?.representation(using: .PNG, properties: [:]) else { 
      print("failed to get PNG representation. url: \(url)") 
      return false 
     } 
     do { 
      try imageData.write(to: url) 
      return true 
     } catch { 
      print("failed to write to disk. url: \(url)") 
      return false 
     } 
    } 
} 

enum error:Error { 
    case imageCreationFailure 
} 


func resizeImageByFactor(_ url:URL) throws { 
    let image = NSImage(byReferencing: url) 
    guard image.isValid else { throw error.imageCreationFailure } 

    let reSize = NSSize(width: 50, height: 50) 

    let oldRect = CGRect(x: 0.0, y: 0.0, width: image.size.width, height: image.size.height) 
    let newRect = CGRect(x: 0.0, y: 0.0, width: reSize.width, height: reSize.height) 

    let newImage = NSImage(size: reSize) 

    newImage.lockFocus() 
    image.draw(in: newRect, from: oldRect, operation: .copy, fraction: 1.0) 
    newImage.unlockFocus() 

    newImage.size 

    let url = URL(fileURLWithPath: "test.jpg", relativeTo: url.deletingLastPathComponent()) 
    newImage.saveAsPNG(url: url) 



} 

答えて

2

OS X & iOSデバイスには倍率があります。 iPhone 5、5S、6などはすべて倍率が2倍です。 iPhone 6 Plusの倍率は3倍です。古い非網膜のiPhoneには1倍の倍率があります。 4Kディスプレイを搭載したOS Xマシンの倍率は2倍です。あなたは何をすべき

はこれです:

let scalingFactor = NSScreen.mainScreen()?.backingScaleFactor; 

let size = NSSize(width: 50/scalingFactor!, height: 50/scalingFactor!); 
+0

うん - それがあったという。ありがとう! –

関連する問題