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

时间:2015-08-30 23:51:02

标签: python image crop

我正在寻找一种方法来打开和裁剪多个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")

此脚本返回错误:

  

追踪(最近一次呼叫最后一次):

     

文件“C:\ Users ... \ Desktop \ Python \ script.py”,第22行,中          im = Image.open(file)
  文件“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经验和代码。对不起,如果答案很明显

[EDIT /更新] 在修改了我的初始代码之后,感谢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行,in          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行,in   load_prepare       self.im = Image.core.new(self.mode,self.size)ValueError:无法识别的模式

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

1 个答案:

答案 0 :(得分:0)

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

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

所以你可以替换

im = Image.open(file)

filepath = os.path.join(filespath, file)
im = Image.open(filepath)

还可以考虑使用glob模块,就像glob.glob(r'path\*.tif)一样。 避免使用file之类的内置函数作为变量名称也是一种好习惯。