如何使用PIL和os.path将同名图片保存到不同方向?

How to save images with the same name to the different direction using PIL and 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)
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 变量更改为不同的名称。

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) 来达到目的
  • 您不应该尝试明确定义每个图像的扩展名 as .png 因为在处理其他图像时可能会产生问题 格式。

首先, 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] 应该 return 图片路径不包括扩展名

解决这个问题,你可以试试:

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)

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

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

这行代码正在转换您的 thumbnail.which 不是调整大小的好方法。试试下面的代码。

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') 

在此代码中,您直接从文件夹中获取图像,调整它们的大小并将它们保存到具有相同名称的其他位置。所有的图片都是一张一张的处理,所以你不用担心一次把所有的图片加载到内存中。