Найти - Пользователи
Полная версия: масштабирование картинок в папке
Начало » Центр помощи » масштабирование картинок в папке
1 2 3
Lion1971
import os, Image, math
list_files_jpg = [file_name for file_name in os.listdir('.') if file_name.endswith(".jpg")]
for i in list_files_jpg:
    im=Image.open(i)
    factor=im.size[0]/460.0
    f=int(math.ceil(im.size[1]/factor))
    out=im.resize((460,f))
    newname=i.split(".")[0]+"_r.jpg"
    out.save(newname)
вот, наверное, громозко…
4kpt
Почитайте предыдущее сообщение.
Е еще…
Так делать нежелательно (по стандарту):
import os, Image, math
Лучше делать отдельные импорты :)
Lion1971
Большое спасибо!
Да уж, велик и могуч сей Питон
4kpt
Не за что.
И последнее. Писать скрипт, который придется таскать в каждую папку, где нужно вносить изменения - не “по-феншую”. Желательно делать скрипт так. что при его запуске можно передать список путей к папкам с фото, а он сам все за вас сделает…
Lion1971
да, кстати… я так понял, thumbnail работает исходя из большей стороны?
Lion1971
import os
import Image
new_width=460
list_files_jpg = [file_name for file_name in os.listdir('.') if file_name.endswith(".jpg")]
for i in list_files_jpg:
    im=Image.open(i)
    scalefactor=im.size[0]/float(new_width)
    newsize=(new_width, int(im.size[1]/scalefactor)+1)
    out=im.resize(newsize, Image.ANTIALIAS)
    out.save('r_'+i)
вот переделал, может кому сгодится
4kpt
Да, thumbnail исходит из того, что фотография должна вписаться в box, который передается. Так как вписывать в box нужно по большей стороне, то -да, Вы правильно написали.
4kpt
Так будет более качественно:
import os
import Image
def new_image(path, new_width, text="r_"):
    for name in [file_name for file_name in os.listdir(path) if file_name.endswith(".jpg")]:
        img = Image.open(name)
        out = im.resize((new_width, img.size[1] * new_width / img.size[1] + 1), Image.ANTIALIAS)
        out.save(text + name)
new_image("Ваш_путь", 460)
Lion1971
Спасибо. Качественно и красиво
только
out = im.resize((new_width, img.size[1] * new_width / img.size[1] + 1), Image.ANTIALIAS)
нужно
out = im.resize((new_width, img.size[1] * new_width / img.size[0] + 1), Image.ANTIALIAS)
4kpt
Lion1971
Качественно и красиво
Это не качественно и красиво, а так, на скорую руку. Качественно будет в виде классов :)
Писал на вскидку, не проверяя. Сказал выше, что у меня уже есть универсальный класс. Он все это делает пакетно + еще много чего :)

Просто в виде функции код получается более универсальным…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB