web-dev-qa-db-ja.com

NSImageの正しい画像の幅と高さを取得します

以下のコードを使用して、NSImageの幅と高さを取得します。

NSImage *image = [[[NSImage alloc] initWithContentsOfFile:[NSString stringWithFormat:s]] autorelease];
imageWidth=[image size].width;
imageHeight=[image size].height;
NSLog(@"%f:%f",imageWidth,imageHeight);

ただし、imageWidthimageHeightが正しい値を返さない場合があります。たとえば、画像を読むと、EXIF情報が表示されます。

PixelXDimension = 2272;
PixelYDimension = 1704;

ただし、imageWidth、imageHeightの出力

521:390 
21
arachide

画像のサイズ(ピクセル単位)は、画像のNSImageRepに保存されます。ファイルに含まれる画像が1つだけの場合、次のようになります。

NSImageRep *rep = [[image representations] objectAtIndex:0];
NSSize imageSize = NSMakeSize(rep.pixelsWide, rep.pixelsHigh);

ここで、imageはNSImageであり、imageSizeはピクセル単位の画像サイズです。

27
Kibernetik

NSImage sizeメソッドは、画面の解像度に依存するサイズ情報を返します。実際のファイルイメージで表されるサイズを取得するには、NSImageRepを使用する必要があります。

nsimage-size-not-real-size-with-some-pictures リンクを参照して、助けを求めてください

10
Paresh Navadiya

直接APIは正しい結果も提供します

CGImageRef cgImage = [oldImage CGImageForProposedRect:nil context:context hints:nil];
size_t width = CGImageGetWidth(cgImage);
size_t height = CGImageGetHeight(cgImage);
3
Karsten

Appleは、DPIに基づくポイントシステムを使用して、ポイントを物理デバイスのピクセルにマッピングします。 EXIFの内容は関係ありません。また、キャンバスに画像を表示するために必要な論理画面ポイントの数が重要です。

iOSとOSXがこのマッピングを実行します。気にする必要がある唯一のサイズは、UIImage.sizeから返されるサイズです。

デバイスピクセルへのマッピングを自分で行うことはできません(読む必要はありません)。そのため、Appleが行います。

3
deleted_user

Swift 4

正しいピクセルの高さと幅を取得するには、NSBitmapImageRepNSImage表現を作成する必要があります。まず、この拡張機能を使用して、CGImageからNSImageを収集します。

extension NSImage {
    @objc var CGImage: CGImage? {
        get {
            guard let imageData = self.tiffRepresentation else { return nil }
            guard let sourceData = CGImageSourceCreateWithData(imageData as CFData, nil) else { return nil }
            return CGImageSourceCreateImageAtIndex(sourceData, 0, nil)
        }
    }
}

次に、高さと幅を取得する場合:

let rep = NSBitmapImageRep(cgImage: (NSImage(named: "Your Image Name")?.CGImage)!)
let imageHeight = rep.size.height
let imageWidth = rep.size.width
1
Carter Cobb