Python 打开进程并将特定图像保存在相关文件夹中

Python 打开进程并将特定图像保存在相关文件夹中,python,image,crop,Python,Image,Crop,我正在寻找一种方法来打开和裁剪几个tiff图像,然后保存在同一文件夹(与我的脚本文件夹相关)中创建的新Cropped图像 我当前的代码如下所示: from PIL import Image import os,platform filespath = os.path.join(os.environ['USERPROFILE'],"Desktop\Python\originalImagesfolder") for file in os.listdir(filespath): if fi

我正在寻找一种方法来打开和裁剪几个tiff图像,然后保存在同一文件夹(与我的脚本文件夹相关)中创建的新Cropped图像

我当前的代码如下所示:

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")
此脚本正在向我返回错误:

回溯(最近一次呼叫最后一次):

文件“C:\Users…\Desktop\Python\script.py”,第22行,在 im=图像。打开(文件)
打开文件“C:\Python34\lib\site packages\PIL\Image.py”,第2219行 fp=内置打开(fp,“rb”) FileNotFoundError:[Errno 2]没有这样的文件或目录:“Image1Name.tif”

“Image1Name.tif”是我试图在文件夹中处理的第一个tif图像。我不明白脚本如何在无法找到文件的情况下给出文件名。有什么帮助吗

PS:一般来说,我在python和代码方面有2天的经验。如果答案显而易见,我很抱歉

[编辑/更新] 在修改我的初始代码后,感谢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((3000660037006750)).save(“crop”+文件)
文件“C:\Python34\lib\site packages\PIL\Image.py”,第986行,在crop中 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)值错误:无法识别的模式


一个可能有用的信息,它是GeoTiff格式的Landsat8图像。因此,TIFF文件包括地理位置、投影。。。信息。如果我首先用Photoshop(16int tiff格式)等软件打开并重新保存脚本,脚本工作得非常好。

搜索文件名时,使用filepath指定目录

但是,当您打开文件时,您只使用基本文件名

所以你可以替换

im = Image.open(file)

也考虑使用GLUB模块,如您可以做的那样:<代码> GOLB.GOLB(R'PATH \*TIF)< /代码>。


避免使用内置函数(如
file
)作为变量名也是一种很好的做法。

FileNotFoundError由Image.py抛出。通过调用
os.listdir
可以找到该文件。但是您在那里提供了
filepath
。您需要将
filepath
附加到Image.open()调用,就像这样
im=Image.open(os.path.join(filepath,file))
谢谢您的回答。脚本现在返回错误:文件“C:\Python34\lib\site packages\PIL\Image.py”,第2215行,在open raise ValueError(“错误模式%r”%mode)ValueError:错误模式“Image1.TIF”。这看起来与文件的格式无关,因为脚本文件夹中相同图像上使用的相同函数工作得非常好……不知怎的,您将“Image1.TIF”作为模式参数传递。您自己的代码中的哪一行导致了此异常?请用你的新代码和完整的回溯更新你的帖子。谢谢你的回答。我不得不添加“path”来让它工作:“os.path.join”。抱歉。你说得对。我已经在我的解决方案中解决了这个问题。如果这个答案对您有效,请单击它旁边的箭头接受它。
filepath = os.path.join(filespath, file)
im = Image.open(filepath)