我希望能够获得图像路径,将该图像转换为另一个图像,但格式不同。格式我的意思是.png,.bmp .jpg .tiff等。在伪代码中,这很容易:
image = [ImageAPI open: imagePath]
[image save: imagePath withFormat: IMAGEFORMAT] // this is important
但是,我不知道如何做到这一点。在处理图像时,我几乎不知道NSImage类,并且似乎没有我的问题的答案(没有像这样的简单保存方法)。以下是我要支持的格式列表:
支持我的意思是打开其中任何一个并将打开的图像保存为任何格式。这里有一些组合(15 ??? - 我认为),所以我可以为每个组合编写一个方法,如下所示:
[self saveTiffImageIntoGifWithPath: path] (*15 !!!)
但使用API确实更好。
如果顺便提一下,我也有以下选项:
......我也很乐意支持他们,尽管他们是可选的。 我真的希望有一个简单的方法来做到这一点。致谢
PS:我知道有关于这个主题的问题,但它们都是面向iPhone的(我想在Mac上执行此操作)并且它们都没有提供使用多种格式的方法。答案 0 :(得分:9)
NSData* imgData = [NSData dataWithContentsOfFile: filePath];
如果您正在使用NSImage对象并且很难获得路径(例如使用NSImageView),那么执行此操作(image是您拥有的NSImage对象):
NSData* imgData = [image TIFFRepresentation];
现在您将图像放入NSData对象,将其放入NSBitmapImageRep:
NSBitmapImageRep* bitmap = [NSBitmapImageRep imageRepWithData: imgData];
然后获取一个新的NSData对象,但格式不同:
NSData* newData = [bitmap representationUsingType: NSPNGFileType properties: nil];
// I used NSPNGFileType as an example, but all the
// types I wanted to convert between (except PDF) are supported
最后,将newData保存到文件中:
[newData writeToFile: newPath atomically: YES]
简单就像馅饼一样,一旦你了解它的运作方式!
对透明度和尺寸控制的支持也不是那么困难:
只需在需要时拨打电话即可。给Cocoa +1!
答案 1 :(得分:2)
从NSImage向外探索会引导您NSBitmapImageRep,这正是您想要的。
其中一些iPhone问题也是相关的,因为适用于两个平台的解决方案(以及现在NSBitmapImageRep解决方案背后的实现)是使用CGImageSource来读取图像并CGImageDestination把它写出来。