如何使用PIL和os.path将具有相同名称的图像保存到不同的方向?

时间:2019-06-01 03:12:07

标签: python python-imaging-library os.path

在尝试拆分路径以获取名称时,我得到了回溯: TypeError: expected str, bytes or os.PathLike object, not JpegImageFile。我该如何解决?还是有其他方法?

我尝试将具有相同名称的调整大小后的图像保存到不同的方向。因此,我使用os.path.split()函数。

import glob
from PIL import Image
import os
images = glob.glob("/Users/marialavrovskaa/Desktop/6_1/*")
path = "/Users/marialavrovskaa/Desktop/2.2/"
quality_val=95
for image in images:
    image = Image.open(image)
    image.thumbnail((640, 428), Image.ANTIALIAS)
    image_path_and_name = os.path.split(image)
    image_name_and_ext = os.path.splitext(image[0])
    name = image_name_and_ext[0] + '.png'
    name = os.path.splitext(image)[0] + '.png'
    file_path = os.path.join(path, name)
    image.save(file_path, quality=quality_val)

4 个答案:

答案 0 :(得分:2)

import glob
from PIL import Image
import os

images = glob.glob("Source_path")
path = r"Destination_path"
quality_val=95

for image in images:
    img = Image.open(image)
    img.thumbnail((640, 428), Image.ANTIALIAS)
    name = os.path.split(image)
    file_path = os.path.join(path, name[1])
    img.save(file_path, quality=quality_val)

代码的主要问题是您使用的变量和对象的名称相同image。造成问题的原因。

逻辑错误:-

  • image_path_and_name是代码中不必要的变量,因为它是 没用的。
  • name已用完全不同的值初始化了两次, 而是使用name = os.path.split(image)服务于钱包 两者。
  • 您不应尝试明确定义每个图像的扩展名 与.png一样,因为在处理其他图像时可能会产生问题 格式。

答案 1 :(得分:0)

for image in images:
    image = Image.open(image)
    image.thumbnail((640, 428), Image.ANTIALIAS)
    image_path_and_name = os.path.split(image)

您说image = Image.open(image)时,将覆盖也称为image的循环变量,它不再是可拆分的字符串。

image变量之一更改为其他名称。

答案 2 :(得分:0)

首先, image_name_and_ext = os.path.splitext(image[0])

应该是 image_name_and_ext = os.path.splitext(image_path_and_name[1])

因为图像是字符串,所以image[0]仅获得图像的第一个字符,在这种情况下不是没有用的

第二次

name = os.path.splitext(image)[0] + '.png'等于image

name = os.path.splitext(image)[0]应该返回不包含扩展的图像路径

要解决此问题,您可以尝试:

for image in images:
    img = Image.open(image)
    img.thumbnail((640, 428), Image.ANTIALIAS)
    name = os.path.split(image)
    file_path = os.path.join(path, name[1])
    image.save(file_path, quality=quality_val)

答案 3 :(得分:0)

通过上面的代码,您将获得缩略图图像,我建议您使用调整大小功能,因为通过调整大小,您可以保持宽高比,从而帮助您获得更好的效果。

image.thumbnail((640, 428), Image.ANTIALIAS)

这行代码正在转换您的缩略图。这不是调整大小的好方法。尝试下面的代码。

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import PIL
import os
from PIL import Image

PATH = "F:\\FYP DATASET\\images\\outliers Dataset\\Not Outliers\\"
Copy_to_path="F:\\FYP DATASET\\images\\outliers Dataset\\"

for filename in os.listdir(PATH):
    img = Image.open(os.path.join(PATH, filename)) # images are color images
    img = img.resize((224,224), Image.ANTIALIAS)
    img.save(Copy_to_path+filename+'.jpeg') 

在此代码中,您将直接从文件夹中拍摄图像,并调整其大小并将其保存到其他具有相同名称的位置。所有图像都在一个接一个地处理,因此您不必担心立即将所有图像加载到内存中。