во-первых,
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)