python PIL中16位无符号原始二进制映像文件的模式

时间:2012-06-07 16:58:06

标签: python image python-imaging-library binary-data grayscale

您好我正在使用Python Imaging Library对图像进行小幅转换。该图像是具有16位无符号整数的原始二进制文件。出于某种原因,我不能让python工作它不断给我以下错误:

    Traceback (most recent call last):
  File "C:\Users\Patrick\workspace\colorCorrect\src\editGrayscale.py", line 24, in <module>
    changed.save(saveFile)
  File "C:\Python27\lib\site-packages\PIL\Image.py", line 1423, in save
    raise KeyError(ext) # unknown extension
KeyError: '.bin'

我的代码如下:

import Image
#file to save:  C:\Users\name\imagedata\visiblespec.bin

fileName = raw_input("Enter a file name: ")
saveFile = raw_input("Enter a new save file name: ")

with open(fileName, 'rb') as f:
im = Image.fromstring('L', (3032, 2016), f.read()) # also try 'L;16B', 'I;16', and 'I;16B'
changed = im.point(lambda i: i/2)

changed.save(saveFile的)

我的图像再次是一个灰度16位无符号整数,大约11 mbs,用十六进制编写。

谢谢!

更新:

用于保存文件的代码:

def save(filename, contents):  
   fh = open(filename, 'w')  
   fh.write(contents)  
   fh.close() 

save(saveFile, final)

1 个答案:

答案 0 :(得分:0)

PIL的所有有效模式都列在文件底部附近的源文件unpack.c中。我将从包含16的那些开始。

鉴于您的编辑,还有其他问题。首先是PIL.Image需要确定一个用于写出文件的编码器,它使用文件扩展名来完成。您的.bin文件扩展名是非标准的,因此无法知道要使用的格式。尝试类似.png的内容。

第二个问题是并非每种文件类型都支持每种图像格式。您可能需要在保存之前转换图像。

changed.convert('L').save(saveFile)

鉴于您的上一条评论,您只想将值写回原始格式文件。您可以尝试'raw'格式或仅使用tostring自行写入文件。

changed.save(saveFile, 'raw')