2016-10-15 7 views
1

У меня есть эти функции, которые я объединил, чтобы изменить размер и сохранить изображение. Но, похоже, это не изменяет размеры моих изображений - изображение размером 150x150 было уменьшено, так как изображение размером 50x50 было сохранено как 100x100. Любые идеи, что вызывает это?изменение размера изображения и сохранение в файл

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 и т. Д. Имеют коэффициент масштабирования 2x. IPhone 6 Plus имеет коэффициент масштабирования 3x. У старых не-сетчатых iPhones есть 1x масштабный коэффициент. Моя машина OS X с дисплеем 4K имеет коэффициент масштабирования 2x.

Что вы должны сделать это:

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

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

да - это было. Благодаря! –

Смежные вопросы