gpt4 book ai didi

objective-c - 在 Objective-C 中的多种图像格式之间转换

转载 作者:太空狗 更新时间:2023-10-30 03:48:42 25 4
gpt4 key购买 nike

我希望能够在获得图像路径的情况下将该图像转换为另一幅图像,但格式不同。我所说的格式是指 .png、.bmp、.jpg、.tiff 等。在伪代码中,这非常简单:

image = [ImageAPI open: imagePath]
[image save: imagePath withFormat: IMAGEFORMAT] // this is important

虽然我不知道该怎么做。在处理图像方面,我只知道 NSImage 类),而且这似乎没有解决我的问题(没有像这样的简单保存方法)。以下是我希望支持的格式列表:

  • .png
  • .tiff
  • .gif
  • .jpeg
  • .bmp
  • 可能是 .pdf(如果不是很复杂)

我所说的支持是指打开其中任何一个并将打开的图像保存为任何这些格式。这里有一些组合(15 ??? - 我认为),所以我可以为每个组合编写一个方法,如下所示:

[self saveTiffImageIntoGifWithPath: path] (*15 !!!)

但使用 API 无疑更好。

如果一路上有任何机会我也有这样的选择:

  • 是否保持阿尔法
  • 调整图片大小

...我也很乐意支持它们,尽管它们是可选的。我真的希望有一个简单的方法来做到这一点。谢谢

PS:我知道有关于这个主题的问题,但他们都是面向 iPhone 的(我想在 mac 上这样做)并且他们都没有提供使用多种格式来做到这一点的方法。

最佳答案

好吧,在 Peter 的帮助下我可以解决这个问题。首先,如果您使用的是图像路径,则直接使用 NSData 打开文件,如下所示:

NSData* imgData = [NSData dataWithContentsOfFile: filePath];

如果您正在使用 NSImage 对象并且很难获得路径(例如使用 NSImageView),那么请执行此操作(图像是您拥有的 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 writeToFile: newPath atomically: YES]

一旦了解它的工作原理,就像馅饼一样简单!


透明度和大小控制的支持也不是那么困难:

  • NSImage 类支持设置图像大小 (-setSize:)
  • NSImageRep(NSBitmapImageRep 的父类(super class))有 -setAlpha: 方法

只需在需要时调用它们即可。 cocoa +1!

关于objective-c - 在 Objective-C 中的多种图像格式之间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6562195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com