您好我正在使用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)
答案 0 :(得分:0)
PIL的所有有效模式都列在文件底部附近的源文件unpack.c
中。我将从包含16
的那些开始。
鉴于您的编辑,还有其他问题。首先是PIL.Image需要确定一个用于写出文件的编码器,它使用文件扩展名来完成。您的.bin
文件扩展名是非标准的,因此无法知道要使用的格式。尝试类似.png
的内容。
第二个问题是并非每种文件类型都支持每种图像格式。您可能需要在保存之前转换图像。
changed.convert('L').save(saveFile)
鉴于您的上一条评论,您只想将值写回原始格式文件。您可以尝试'raw'
格式或仅使用tostring
自行写入文件。
changed.save(saveFile, 'raw')