2015/05/15

最近またSwiftをやっているのですが、取得した画像サイズがおかしいことがあり、すっかりはまっていました。
縦横サイズが同じpng画像を読み込んで縦横サイズを取得しているのですが、画像によって返ってくる値が異なっていました。
 
let path = "/Users/ug/Desktop/image.png"
let image = NSImage(contentsOfFile: path)
let imageWidth = image.size.width
let imageHeight = image.size.height

23 × 320画像を読み込んでいますが、
別に用意した同じサイズの画像だと、5.51999...×76.79....というサイズで返ってきます。
NSUrlにしてから読み込んでみたり、
NSDateにしてから読み込んでみたり、
NSBitmapImageRepにしてから読み込んだり、
Objective-cを経由して読み込んでみたりしても同じでした。

ここ数日すっかり困っていたのですが、解像度が違う画像を読む場合、sizeを使って取得すると、72dpiに変換されて返ってくるという情報を得て、画像情報を見たら、正常に返ってくる画像は72dpi、正常に返ってこない画像は、300dpiでした。

Google先生の検索が甘かったようです。

画像サイズ取得の場合は、sizeではなく、NSImage→NSBitmapImageRep→pixelsWide/pixelsHeighで取得する
 
let path = "/Users/ug/Desktop/image.png"
let image = NSImage(contentsOfFile: path)
let bmpir = NSBitmapImageRep(data:image!.TIFFRepresentation!)
let imageWidth = image.pixelsWide
let imageHeight = image.pixelsHeigh

これでちゃんと返ってくるようになりました。

当たり前のことなのかもしれませんが、久しぶりにはまったので防備録として残しておきます。
助かりました。

参考)画像サイズの取得: NSImageのサイズがおかしい
 

Copyright © Rocomotion