Уведомления

Группа в Telegram: @pythonsu

#1 Июль 13, 2013 14:36:25

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))
    newname=i.split(".")[0]+"_r.jpg"
    out.save(newname)
вот, наверное, громозко…

Офлайн

#2 Июль 13, 2013 14:37:48

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

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

Почитайте предыдущее сообщение.
Е еще…
Так делать нежелательно (по стандарту):

import os, Image, math
Лучше делать отдельные импорты :)



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

Офлайн

#3 Июль 13, 2013 14:42:56

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

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

Большое спасибо!
Да уж, велик и могуч сей Питон

Офлайн

#4 Июль 13, 2013 14:47:33

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

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

Не за что.
И последнее. Писать скрипт, который придется таскать в каждую папку, где нужно вносить изменения - не “по-феншую”. Желательно делать скрипт так. что при его запуске можно передать список путей к папкам с фото, а он сам все за вас сделает…



Офлайн

#5 Июль 13, 2013 14:57:54

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

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

да, кстати… я так понял, thumbnail работает исходя из большей стороны?

Офлайн

#6 Июль 13, 2013 15:16:16

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

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

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)
вот переделал, может кому сгодится

Офлайн

#7 Июль 13, 2013 15:30:53

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

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

Да, thumbnail исходит из того, что фотография должна вписаться в box, который передается. Так как вписывать в box нужно по большей стороне, то -да, Вы правильно написали.



Офлайн

#8 Июль 13, 2013 15:42:48

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

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

Так будет более качественно:

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)



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

Офлайн

#9 Июль 13, 2013 21:04:21

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

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

Спасибо. Качественно и красиво
только

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)

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

Офлайн

#10 Июль 13, 2013 22:11:56

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

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

Lion1971
Качественно и красиво
Это не качественно и красиво, а так, на скорую руку. Качественно будет в виде классов :)
Писал на вскидку, не проверяя. Сказал выше, что у меня уже есть универсальный класс. Он все это делает пакетно + еще много чего :)

Просто в виде функции код получается более универсальным…



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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version