如何在Objective-C中更改图像分辨率

5

我需要在Objective-C中像Apple的预览应用程序工具->调整大小...->分辨率中一样更改现有图像的分辨率。

请告诉我可能的解决方案。

3个回答

17

我用过的一个很棒的示例是 - http://weblog.scifihifi.com/2005/06/25/how-to-resize-an-nsimage/

从那个示例中,你可以将调整大小后的数据写入文件 - 这将是 tiff 格式的调整大小输出。

更新:

这里是 NSImage 类别实现,允许保存具有指定 DPI 的 NSImage 实例:

@interface NSImage (DPIHelper)
- (void) saveAsImageType: (NSBitmapImageFileType) imageType withDPI: (CGFloat) dpiValue atPath: (NSString *) filePath;
@end

@implementation NSImage (DPIHelper)


- (void) saveAsImageType: (NSBitmapImageFileType) imageType withDPI: (CGFloat) dpiValue atPath: (NSString *) filePath
{
  NSBitmapImageRep *rep = [[self representations] objectAtIndex: 0];

  NSSize pointsSize = rep.size;
  NSSize pixelSize = NSMakeSize(rep.pixelsWide, rep.pixelsHigh);

  CGFloat currentDPI = ceilf((72.0f * pixelSize.width)/pointsSize.width);
  NSLog(@"current DPI %f", currentDPI);

  NSSize updatedPointsSize = pointsSize;

  updatedPointsSize.width = ceilf((72.0f * pixelSize.width)/dpiValue);
  updatedPointsSize.height = ceilf((72.0f * pixelSize.height)/dpiValue);

  [rep setSize:updatedPointsSize];

  NSData *data = [rep representationUsingType: imageType properties: nil];
  [data writeToFile: filePath atomically: NO];

}

@end

您可以像这样使用它:

NSImage *theImage2 = [NSImage imageNamed:@"image.jpg"];
[theImage2 saveAsImageType:NSJPEGFileType withDPI: 36.0f atPath: @"/Users/<user-name>/image-updated.jpg"];

你好,再次感谢您抽出时间为我提供参考。但是,我的问题仍未得到解答。我需要一段简单的代码来将NSImage / NSBitmapImageRep DPI更改为给定的DPI。我不知道如何通过组成现有的NSImage来改变DPI。请提供一个简单的NSImage类别或方法,它将接受NSImage和新的DPI作为参数,并返回具有传递的DPI的新NSImage。在保存该新NSImage时,必须等同于手动调整后的Preview应用程序图像。 - AmitSri
Denis,感谢你提供的代码似乎能够解决问题。我首先加载了300 DPI的图像并将其更改为72 DPI,这个步骤很顺利。现在,当我再次取出相同的72 DPI转换后的图像并尝试将其还原为300 DPI时,在预览应用程序中会显示DPI高度=300且DPI宽度=299.7073。请告知我这是否是普遍现象还是仅是预览应用程序中的舍入问题。再次感谢您的帮助。 - AmitSri
是的,看起来像是一个四舍五入问题 - 我正在使用 ceil 函数,它只取最小的整数,也许使用 roundf 函数会更好。 - Denis
嗨,谢谢。我已经使用了 roundf() 而不是 ceilf(),现在看起来好像稍微好一点了。 - AmitSri
有没有办法在IOS上仅设置JPG文件的DPI信息而不改变其宽度和高度?Denis提供的代码使用NSBitmapImageRep类,在IOS中我们找不到这个类。我们有一个带有72 dpi的2652 x 1850 JPG,并希望创建一个具有相同大小(2652x1850)但具有300 dpi的JPG(只是为了获得更合理的打印尺寸)。任何建议都将受到欢迎。重要提示:我们需要在IPAD / IPHONE应用程序上实现此功能。 - Robson Reis
显示剩余4条评论

0

嗨,谢谢。我已经检查了那些应用程序,但没有找到任何可以帮助我直接调整NSImage图像分辨率并将其保存为新文件或覆盖现有文件的代码。如果我漏掉了什么,请告诉我。 - AmitSri

0

您不能将图像转换为高分辨率。那么您想压缩图像吗?

如果这是您想要的,那么您可以使用:UIImagePNGRepresentation和/或UIImageJPEGRepresentation。需要设置quality属性。根据质量,您的图像大小将会减小。


嗨,感谢您的努力,但我需要针对MAC OS应用程序的解决方案,而不是iPhone。 - AmitSri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接