2

Я хочу, чтобы все изображения в данной директории имели одинаковый размер. Это то, что у меня есть:Автоматическое изменение размера изображения в подушке

import PIL 
import os 
import math 

from PIL import Image 

dirPath = r"C:\\a" 
dirList = os.listdir(dirPath) 
outPath = r"C:\\b" 

im_new = Image.new('RGB', (124,90), 'white') 
new_w = 124 
new_h = 90 

for (dirname, dirs, files) in os.walk(dirPath): 
    for filename in files: 
     print("Opening:"+filename) 
     thefile = os.path.join(dirname,filename) 
     im = Image.open(thefile) 

     old_w, old_h = im.size 

     x1 = int(math.floor((new_w - old_w)/2)) 
     y1 = int(math.floor((new_h - old_h)/2)) 

     im_new.paste(im, (x1, y1, x1 + old_w, y1 + old_h)) 

     print("Saving:"+filename) 
     outfile = os.path.join(outPath,filename) 
     im_new.save(outfile, "PNG") 


print("Done!") 

Дело в том, что он не работает правильно. Вместо того, чтобы иметь изображение, закрепленное на белом фоне, оно просто бросает предыдущие на следующий. Надеюсь, что это имеет смысл.

ответ

1

im_new создано за пределами цикла, поэтому у вас его всегда есть. Изменения, внесенные в одну итерацию цикла, видны в последующих итерациях. Попробуйте создать его внутри цикла.

for (dirname, dirs, files) in os.walk(dirPath): 
    for filename in files: 
     im_new = Image.new('RGB', (124,90), 'white') 
     #... 
+0

Работает как очарование, спасибо! – bjorgulf

Смежные вопросы