如何使用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')
在此代码中,您直接从文件夹中获取图像,调整它们的大小并将它们保存到具有相同名称的其他位置。所有的图片都是一张一张的处理,所以你不用担心一次把所有的图片加载到内存中。
在尝试拆分路径以获取名称时,我得到了回溯:
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')
在此代码中,您直接从文件夹中获取图像,调整它们的大小并将它们保存到具有相同名称的其他位置。所有的图片都是一张一张的处理,所以你不用担心一次把所有的图片加载到内存中。