2.2.3.2 旧的buffer协议

  • 只有1-D buffers
  • 没有数据类型信息
  • C-级接口;PyBufferProcs tp_as_buffer在类型对象中
  • 但是它被整合在Python中(比如,字符支持这个协议)

使用PIL(Python Imaging Library)的小练习:

也可以看一下:pilbuffer.py

In [ ]:

  1. import Image
  2. data = np.zeros((200, 200, 4), dtype=np.int8)
  3. data[:, :] = [255, 0, 0, 255] # Red
  4. # In PIL, RGBA images consist of 32-bit integers whose bytes are [RR,GG,BB,AA]
  5. data = data.view(np.int32).squeeze()
  6. img = Image.frombuffer("RGBA", (200, 200), data)
  7. img.save('test.png')

Q: 检查一下如果data修改的话,再保存一下img看一下会发生什么。