在Python中以十六进制格式存储图像数据(字体)

时间:2011-06-12 11:33:09

标签: python

我正在尝试修改此代码(http://code.google.com/p/pypng/source/browse/trunk/code/texttopng),以便它可以呈现扩展的ASCII符号。目前我正在试图弄清楚如何以十六进制格式存储字体,但经过广泛的谷歌搜索后,我无法理解它,也无法扩展它。

我正在尝试解决的另一个问题是使用此脚本渲染甚至多行文档。我认为这与这行代码有关

return x,y,itertools.imap(lambda row: itertools.chain(*row), zip(*map(char, m)))

谢谢。

1 个答案:

答案 0 :(得分:2)

基本上,不要这样做。它有点模糊,深奥,难以阅读,而且非常有限,因为你已经注意到了自己。 Python Imaging Library使用Freetype2为PNG和JPEG提供文本渲染,这是一种更加完善和功能完备的方法。

现在我们已经解决了这个问题,表示非常简单,顺便提一下,标准库中的documentation of the png module也是如此:

  

提到了第四种格式   因为它在内部使用,是   接近PNG文件中的内容   本身,并得到了一些支持   公共API。调用此格式   包装。打包时,每行都是一个   字节序列(从0到0的整数)   255),就像在PNG之前一样   应用扫描线过滤。什么时候   比特深度基本上是8   与盒装行平面像素相同;   [...]此格式由。使用   Writer.write_packed()方法。

基本上,整数值中的位数范围为0-255,指定该行中的给定像素是打开/关闭的。使用相同代码中的char函数,尝试通过在您喜欢的Python shell中执行类似的操作来对其进行可视化:

for row in char("A"):
    print bin(row[0])[2:].zfill(8)

您最终应该输出如下输出:

00000000
00111000
01000100
01111100
01000100
01000100
01000100
00000000

...在等宽字体终端字体中更明显,但仍然应该非常明显。