2017-10-06 9 views
0

私はサイズ変更画像を保存することによって画像のサイズを変更しようとしています。しかし、サイズ変更された画像を囲むこの空白があります。私は私が間違ってやっている何ホワイトスペースサイズ変更画像の周り

extension NSImage { 
func resizeTo(width: CGFloat, height: CGFloat) -> NSImage { 
    let ratioX = width/size.width 
    let ratioY = height/size.height 
    let ratio = ratioX < ratioY ? ratioX : ratioY 
    let newHeight = size.height * ratio 
    let newWidth = size.width * ratio 
    let canvasSize = CGSize(width: width, height: CGFloat(ceil(width/size.width * size.height))) 
    let img = NSImage(size: canvasSize) 
    img.lockFocus() 
    let context = NSGraphicsContext.current() 
    context?.imageInterpolation = .high 
    draw(in: NSRect(origin: .zero, size: NSSize(width: newWidth,height: newHeight)), from: NSRect(origin: .zero, size: size) , operation: .copy, fraction: 1) 
    img.unlockFocus() 
    return img 
    } 
} 

enter image description here

答えて

1

まず、あなたはratioXratioYから最小の比率を選んでいるが、後であなたは(サイズwidthheight * ratioXの)ratioXを使ってキャンバスを作成します。私はnewWidthnewHeightを使ってキャンバスを作成する必要があると思います。

let canvasSize = CGSize(width: newWidth, height: newHeight) 

さらに、このスクリプトは両方向にサイズ変更される、つまり小さな画像のサイズが大きくなることに注意してください。

+0

コードを改善するにはどうすればよいですか?アドバイスをお願いします。 – techno

+0

イメージのサイズを増やさないようにコードを改良したいのであれば、ratio: 'if(ratio)> 0 ratio = 1;' – Gedrox

+0

のようなチェックを追加するだけですので、 'var ratio = ratioX 0 { ratio = 1 } – techno

関連する問題