打开进程并将特定图像保存在相关文件夹中
Posted
技术标签:
【中文标题】打开进程并将特定图像保存在相关文件夹中【英文标题】:Open process and save specific images in related folder 【发布时间】:2015-08-30 23:51:02 【问题描述】:我正在寻找一种方法来打开和裁剪多个 tiff 图像,然后保存在同一文件夹中创建的新裁剪图像(与我的脚本文件夹相关)。
我当前的代码如下所示:
from PIL import Image
import os,platform
filespath = os.path.join(os.environ['USERPROFILE'],"Desktop\Python\originalImagesfolder")
for file in os.listdir(filespath):
if file.endswith(".tif"):
im = Image.open(file)
im.crop((3000, 6600, 3700, 6750)).save(file+"_crop.tif")
此脚本返回错误:
Traceback(最近一次调用最后一次):
文件“C:\Users...\Desktop\Python\script.py”,第 22 行,在 im = Image.open(文件) 文件“C:\Python34\lib\site-packages\PIL\Image.py”,第 2219 行,打开 fp = builtins.open(fp, "rb") FileNotFoundError:[Errno 2] 没有这样的文件或目录:'Image1Name.tif'
'Image1Name.tif' 是我尝试在文件夹中处理的第一个 tif 图像。我不明白脚本如何在找不到文件的情况下给出文件名。有什么帮助吗?
PS:一般来说,我有 2 天的 Python 和代码经验。对不起,如果答案很明显
[编辑/更新] 感谢 vttran 和 ChrisGuest 的回答修改了我的初始代码后,变成了这样:
from PIL import Image
import os,platform
filespath = os.path.join(os.environ['USERPROFILE'],"Desktop\Python\originalImagesfolder")
for file in os.listdir(filespath):
if file.endswith(".tif"):
filepath = os.path.join(filespath, file)
im = Image.open(filepath)
im.crop((3000, 6600, 3700, 6750)).save("crop"+file)
脚本正在向我返回一条新的错误消息:
回溯(最近一次通话最后一次): 文件“C:/Users/.../Desktop/Python/script.py”,第 11 行,在 im.crop((3000, 6600, 3700, 6750)).save("crop"+file) 文件“C:\Python34\lib\site-packages\PIL\Image.py”,第 986 行,裁剪中 self.load() 文件“C:\Python34\lib\site-packages\PIL\ImageFile.py”,第 166 行,加载中 self.load_prepare() 文件“C:\Python34\lib\site-packages\PIL\ImageFile.py”,第 250 行,在 加载准备 self.im = Image.core.new(self.mode, self.size) ValueError: unrecognized mode
可能有用的信息,它是 GeoTiff 格式的 Landsat8 图像。因此,TIFF 文件包括地理位置、投影...信息。如果我首先使用 Photoshop(16int tiff 格式)之类的软件打开并重新保存脚本,脚本就可以正常工作。
【问题讨论】:
FileNotFoundError 由 Image.py 引发。该文件由os.listdir
调用找到。但是你在那里提供filespath
。您需要将 filespath
附加到 Image.open() 调用中,就像 im = Image.open(os.path.join(filespath,file))
感谢您的回答。脚本现在向我返回错误:文件“C:\Python34\lib\site-packages\PIL\Image.py”,第 2215 行,在 open raise ValueError("bad mode %r" % mode) ValueError: bad mode 'Image1.TIF'。这看起来与文件的格式无关,因为在脚本文件夹中的同一图像上使用的相同功能可以正常工作...
不知何故您将“Image1.TIF”作为模式参数传递。您自己代码中的哪一行导致此异常?请使用您的新代码和完整的回溯更新您的帖子。
【参考方案1】:
当您搜索文件名时,您使用 filespath 指定目录。
但是当您打开文件时,您只使用基本文件名。
所以你可以替换
im = Image.open(file)
与
filepath = os.path.join(filespath, file)
im = Image.open(filepath)
还可以考虑使用 glob 模块,就像您可以使用 glob.glob(r'path\*.tif)
一样。
避免使用像file
这样的内置函数作为变量名也是一个好习惯。
【讨论】:
感谢您的回答。我必须添加“路径”才能使其正常工作:'os.path.join'。 道歉。你是对的。我已经在我的解决方案中解决了这个问题。 如果该答案适合您,请点击旁边的箭头接受。以上是关于打开进程并将特定图像保存在相关文件夹中的主要内容,如果未能解决你的问题,请参考以下文章