如何使用 Swift 跨平台编写 PNG 图片?

3
我正在用Swift编写一个跨平台光线追踪器。目前,我卡在了生成图像输出的部分。我已经搜索了几天,但我找到的只有以下内容:
  • 使用UIImagePNGRepresentation编写PNG文件:不行,这只适用于iOS
  • lodepng - 一个轻量级的C库,只包含两个文件(.c和.h):看起来非常有前途,但它无法与我的Swift程序链接 - 非常令人失望
  • libpng:功能齐全的PNG库,对于我的目的来说太过庞大。

图像输出是最初用Swift编写的光线追踪算法的最后一块拼图。如果有人有想法如何完成这个任务,我将非常感激。也许有人可以给出有用的建议来解决这个问题。

另一种选择是找到一种非常简单的图像格式,可以使用现有的库,或者我自己编写Swift算法。

“won't link with my Swift program” 是什么意思? - Code Different
我可以从lodepng库调用C函数。编译器没问题。但是在链接时,链接器抱怨找不到C方法调用的符号。我还注意到编译器在derived/intermediates文件夹中生成了.o文件。有什么想法吗? - blackjacx
这是一个开源库(纯Swift):https://github.com/kelvin13/swift-png - Andreas Ley
1个回答

2
我会使用简单的格式netpbm,然后使用第三方转换器如ImageMagick或GraphicsMagick将其转换为最终形式。
您可以使用netpbm库,或者自己编写像素。
该格式在此链接中有描述。
典型的PPM文件如下所示,其中“P3”魔数表示它是ASCII格式:
$ cat p3.ppm
P3 4 4 255
  0  0  0    0  0  0    0  0  0   255  0 255
  0  0  0    0 255 127  0  0  0    0  0  0
  0  0  0    0  0  0    0 255 127  0  0  0
255  0 255   0  0  0    0  0  0    0  0  0

样例PPM图像的视图

如果您愿意,您可以编写一个“P6”格式的PPM文件,其中像素是原始字节。

$ od -c p6.ppm
0000000   P   6  \n   4       4  \n   2   5   5  \n  \0  \0  \0  \0  \0
0000020  \0  \0  \0  \0 377  \0 377  \0  \0  \0  \0 377 177  \0  \0  \0
0000040  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0 377 177  \0  \0  \0 377
0000060  \0 377  \0  \0  \0  \0  \0  \0  \0  \0  \0

谢谢,我想在找到一个PNG库之前会使用这个。 :-) - blackjacx
1
我猜想这个踩票是因为我没有明确说明如何用Swift实现它。格式非常简单,如果你能写一个“Hello World”程序,那么你就可以写一个p3.ppm文件。我使用Fortran、vi、echo、bash“here documents”等方法编写它们。我在StackExchange的markdown编辑器中编写了这个示例,然后使用GraphicsMagick将其转换为P6。 - Glenn Randers-Pehrson

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