2

您好,我正在使用 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)

更改。保存(保存文件)

同样,我的图像是 11 mbs 左右的灰度 16 位无符号整数,并以十六进制编写。

谢谢!

更新:

用于保存文件的代码:

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

save(saveFile, final)
4

1 回答 1

0

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

鉴于您的编辑,还有其他问题。首先是 PIL.Image 需要确定用于写出文件的编码器,并且它使用文件扩展名来执行此操作。您的.bin文件扩展名是非标准的,因此无法知道要使用哪种格式。尝试类似的东西.png

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

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

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

changed.save(saveFile, 'raw')
于 2012-06-07T17:07:03.653 回答