在尝试拆分路径以获取名称时,我得到了回溯:
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)
答案 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')
在此代码中,您将直接从文件夹中拍摄图像,并调整其大小并将其保存到其他具有相同名称的位置。所有图像都在一个接一个地处理,因此您不必担心立即将所有图像加载到内存中。