首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在python中保存tiff图像

无法在python中保存tiff图像
EN

Stack Overflow用户
提问于 2018-03-17 23:08:39
回答 1查看 816关注 0票数 1

我试图使用以下代码将Image保存为.tif映像:

代码语言:javascript
复制
path = ['../data/', str(i-10)]
mask_path = ['../data/', str(i-10), '_mask']
collage = Image.fromarray(collage, 'L')
collage_mask = Image.fromarray(collage_mask, '1')
collage.save(path, 'tiff')
collage_mask.save(mask_path, 'tiff')

一旦我调用了Image.fromarray()函数,它就变成了一个图像对象,所以我不明白为什么save()调用不能工作。我得到以下错误:

代码语言:javascript
复制
AttributeError                            Traceback (most recent call last)
<ipython-input-103-350cd5436fc3> in <module>()
     14         collage = Image.fromarray(collage, 'L')
     15         collage_mask = Image.fromarray(collage_mask, '1')
---> 16         collage.save(path, 'tiff')
     17         collage_mask.save(mask_path, 'tiff')

~\Anaconda3\lib\site-packages\PIL\Image.py in save(self, fp, format, **params)
   1928 
   1929         try:
-> 1930             save_handler(self, fp, filename)
   1931         finally:
   1932             # do what we can to clean up

~\Anaconda3\lib\site-packages\PIL\TiffImagePlugin.py in _save(im, fp, filename)
   1523 
   1524     else:
-> 1525         offset = ifd.save(fp)
   1526 
   1527         ImageFile._save(im, fp, [

~\Anaconda3\lib\site-packages\PIL\TiffImagePlugin.py in save(self, fp)
    745     def save(self, fp):
    746 
--> 747         if fp.tell() == 0:  # skip TIFF header on subsequent pages
    748             # tiff header -- PIL always starts the first IFD at offset 8
    749             fp.write(self._prefix + self._pack("HL", 42, 8))

AttributeError: 'list' object has no attribute 'tell'

我还尝试将第二个参数移除到保存中,并将其硬编码到pathmask_path变量中。但这也没用。我尝试了plt.(path, collage, cmap = cm.gray),并删除了Image.fromarray()调用,因为如果我使用matplotlib,不需要将它们转换为Image对象。但是,这导致了以下错误:object does not appear to be a 8-bit string path or a Python file-like object

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-17 23:13:43

这个问题与你的第二个论点无关,而与你的第一个论点有关:

代码语言:javascript
复制
path = ['../data/', str(i-10)]
collage.save(path, 'tiff')

Image.save的第一个参数是文件名或打开的文件。但你要给它一个单子。

我不知道你想在这里完成什么。如果您想要一个像../data/1这样的路径,您需要构建一个字符串,而不是该字符串的一部分的列表和一个数字作为一个单独的东西。也许这是:

代码语言:javascript
复制
path = f'../data/{i-10}'

或者这个:

代码语言:javascript
复制
path = os.path.join('../data/', str(i-10))

如果您想了解回溯,因为它有点混乱的…Pillow在这里所做的是,它首先尝试将您的参数作为文件名来处理,然后,如果不起作用,它将尝试将其作为一个文件对象来处理。因此,返回的例外是列表不像文件对象那样工作。您可能从来没有想过它会像文件对象一样工作,而是像文件名一样工作,所以这可以理解。如果Pillow通过将其转换为一个信息更丰富的错误来处理这个错误,也许会更好。但是一般来说,像Pillow这样的API试图为各种不同的类型工作,而这些类型必须以不同的方式来处理,因此很难编写很好的错误处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49342812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档