Skip to content

Commit

Permalink
Fix: Correct image size calculation for macOS with NSImage (#316)
Browse files Browse the repository at this point in the history
Co-authored-by: Caijinglong <cjl_spy@163.com>
  • Loading branch information
sejong2401 and CaiJingLong authored Jan 2, 2025
1 parent d055a41 commit e67ddf9
Showing 1 changed file with 23 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -267,9 +267,29 @@ class Compressor {
func compress(destCreator: () -> CGImageDestination) {
let minWidth = CGFloat(params["minWidth"] as! Int)
let minHeight = CGFloat(params["minHeight"] as! Int)

let srcWidth = image.image.size.width
let srcHeight = image.image.size.height

// NSImage sometimes returns wrong image size. See https://stackoverflow.com/a/9265331/3966361

// NSImage size method returns size information that is screen resolution dependent.
// let srcWidth = image.image.size.width
// let srcHeight = image.image.size.height

// NSImageRep should be used to get the size represented in the actual file image instead.
var srcWidth:CGFloat = 0
var srcHeight:CGFloat = 0

for imageRep in image.image.representations {
let width = CGFloat(imageRep.pixelsWide)
let height = CGFloat(imageRep.pixelsHigh)

if width > srcWidth {
srcWidth = width
}

if height > srcHeight {
srcHeight = height
}
}

let srcRatio = srcWidth / srcHeight
let maxRatio = minWidth / minHeight
Expand Down

0 comments on commit e67ddf9

Please sign in to comment.