Уведомления

Группа в Telegram: @pythonsu

#1 Июль 13, 2013 13:24:55

Lion1971
Зарегистрирован: 2013-07-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

масштабирование картинок в папке

Уважаемые гуру Питона, при работе с сайтом приходиться вручную подгонять размеры картинок под стандарт. К примеру - большая сторона 460 пикс. Меньшая естественно - по соотношению сторон оригинала. Хотелось бы автоматизировать этот процесс до одного клика, запуская скрипт в папке, где лежат джейпеги. Наслышан о PIL. Как проще реализовать перебор файлов в папке по маске *.jpg?
Заранее спасибо.

Офлайн

#2 Июль 13, 2013 13:43:40

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

масштабирование картинок в папке

Студенты в свое врея сделали модуль для автоматичекого конвертирования формата. Он позволяет пакетно обрабатывать много фотографий: менять разрешение в пропорциях, наносить водяной знак, менять формат и еще много плюшек. Уже не помню. Но по маске - нужно будет самому.

Если вопрос только по маске, то можно:

import os
list_files_jpg = [file_name for file_name in os.listdir("путь_к_папке_с_файлами") if file_name.endswith(".jpg")]



Отредактировано 4kpt (Июль 13, 2013 13:44:45)

Офлайн

#3 Июль 13, 2013 13:52:37

Lion1971
Зарегистрирован: 2013-07-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

масштабирование картинок в папке

спасибо, а как указать полный путь к файлу? Присоединить строку типа path+list_files_jpg[]?

Отредактировано Lion1971 (Июль 13, 2013 13:55:31)

Офлайн

#4 Июль 13, 2013 13:56:20

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

масштабирование картинок в папке

Как Вы поняли, os.listdir возвращает список всех файлов по указанному пути.
Чтобы получить полный путь к одному из этих файлов, нужно

path_to_jpg_file = os.path.join("путь_переданный_в_listdir", "имя_файла_из_listdir")



Офлайн

#5 Июль 13, 2013 14:00:12

Lion1971
Зарегистрирован: 2013-07-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

масштабирование картинок в папке

а если скрипт выполняется в папке с рисунками, то есть путь - текущая папка?

Офлайн

#6 Июль 13, 2013 14:06:25

Lion1971
Зарегистрирован: 2013-07-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

масштабирование картинок в папке

вроде так os.listdir('.')

Офлайн

#7 Июль 13, 2013 14:13:31

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

масштабирование картинок в папке

Лучше указывать явно :)



Офлайн

#8 Июль 13, 2013 14:20:24

Lion1971
Зарегистрирован: 2013-07-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

масштабирование картинок в папке

ну если мёд то уж ложкой
как сформировать новое имя файла для сохранения тип name_r.jpg

Офлайн

#9 Июль 13, 2013 14:23:43

Lion1971
Зарегистрирован: 2013-07-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

масштабирование картинок в папке

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))
    
вот типа такого, только сохранить осталось

Офлайн

#10 Июль 13, 2013 14:36:17

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

масштабирование картинок в папке

Зачем так сложно.
Есть метод thumbnail. Он автоматески определить пропорции :)
Для сохранения есть метод save(“полный_путь_для_нового_файла”)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version