我有一个 Mac (非iOS)应用程序,允许用户使用 NSOpenPanel 选择一个或多个图像。我遇到的问题是如何获得多层图像的正确尺寸。如果图像包含一个图层或已压缩,则以下内容将通过文件路径为我提供正确的图像尺寸。
NSImage *image0 = [[NSImage alloc] initWithContentsOfFile:path];
CGFloat w = image0.size.width;
CGFloat h = image0.size.height;
但如果我选择一个有多个图层的图像,我会得到奇怪的数字。例如,根据 Fireworks ,我有一个单层图像,其尺寸为1,440 x 900像素。如果我添加一个小圆圈并将图像保存为 PNG 并读取它,我会得到1,458 x 911像素。根据{{3}}和this topic,他们建议我阅读最大的图层。好的。所以我创建了一个函数如下。
- (CGSize)getimageSize :(NSString *)filepath {
NSArray * imageReps = [NSBitmapImageRep imageRepsWithContentsOfFile:filepath];
NSInteger width = 0;
NSInteger height = 0;
for (NSImageRep * imageRep in imageReps) {
if ([imageRep pixelsWide] > width) width = [imageRep pixelsWide];
if ([imageRep pixelsHigh] > height) height = [imageRep pixelsHigh];
}
NSSize size = CGSizeMake((CGFloat)width, (CGFloat)height);
return size;
}
使用上面的函数,我得到的尺寸错误(1,458 x 911 px)而不是1,440 x 900 px。实际上,几年前我用REAL Stupid开发Mac应用程序时遇到了同样的问题。那么当图像包含多个图层时,如何获得正确的尺寸?
感谢您的建议。