Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 10, 2012 02:03:13

Ska1n
Зарегистрирован: 2012-06-10
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

PIL и геометрическая трансформация изображения

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

Прикреплённый файлы:
attachment pr.jpg (5,3 KБ)

Офлайн

#2 Июнь 10, 2012 05:01:00

Ska1n
Зарегистрирован: 2012-06-10
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

PIL и геометрическая трансформация изображения

нагуглил, что нужно смотреть в сторону, что-то типа такого

im.transform((1000,1000),Image.PERSPECTIVE ,(1, 0, 0, 0, 1, -100,0, .001))
но с просчетами у меня увы туго, уровень знаний математики остался еще в далеком 7 классе… может есть какая-нибудь прога, в который выставляешь перспективу, а она тебе точки в цифрах? для аффинных преобразований нашел вот такое - http://www.senocular.com/flash/tutorials/transformmatrix/, а вот для перспективы бы… в гимпе есть возможность выстроить перспективу и показывает 9 точек, но, выставляя их в свой код и используя на своем примере, получается совершенно не то =\

Отредактировано Ska1n (Июнь 10, 2012 18:19:13)

Офлайн

#3 Июнь 11, 2012 04:56:18

Ska1n
Зарегистрирован: 2012-06-10
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

PIL и геометрическая трансформация изображения

вопрос решил методом перебора значений через явасрипт, но встал другой вопрос: какие лучше применить фильтры, чтобы качество картинки было приемлемым? у меня картинки в png формате, с прозрачным альфа-каналом. Допустим, в фотошопе изменяя, границы мягко смазываются и не так сильно искажает качество, как в PILe… пробовал связку DETAIL + SMOOTH, но все равно не ахти( может у кого есть решения?

Офлайн

#4 Июнь 11, 2012 10:36:12

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

PIL и геометрическая трансформация изображения

Покажите код.
Подозреваю, что вы используете

Ska1n
пробовал связку DETAIL + SMOOTH
уже после того как изображение испорчено.

Image.transfom() принимает аргумент filter, который по умолчанию NEAREST - самый быстрый, но качество плохое. Можно попробовать BICUBIC или BILINEAR, и решить, что больше подходит.
import Image
 
img = Image.open('test.png')
w, h = img.size
for mode in ('NEAREST', 'BILINEAR', 'BICUBIC'):
    new = img.transform((w * 2, h * 2),
                         Image.PERSPECTIVE,
                         (1, 0, 0, 0, 1, -100,0, .001),
                         getattr(Image, mode))
    new.save('test_%s.png' % mode)

Офлайн

#5 Июнь 11, 2012 12:24:45

Ska1n
Зарегистрирован: 2012-06-10
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

PIL и геометрическая трансформация изображения

так точно, применял фильтр после искажений изображения

a = float(request.POST['a'])
b = float(request.POST['b'])
c = float(request.POST['c'])
d = float(request.POST['d'])
e = float(request.POST['e'])
f = float(request.POST['f'])
g = float(request.POST['g'])
h = float(request.POST['h'])
im = Image.open("/home/www/html/Piltest/test.png")
out = im.transform(im.size,Image.PERSPECTIVE ,(a,b,c,d,e,f,g,h)).filter(ImageFilter.DETAIL).filter(ImageFilter.SMOOTH_MORE)
    
out.save("/home/www/html/files/test_tmp.png", "PNG")
опробовал по вашему, бикубик подошел лучше остальных, благодарю за помощь.
В довесок можно еще вопрос? в какую степь глядеть: нужно в изображение сделать 2-3 прямоугольных дыры (в виде альфа-каналов), через ПИЛ это возможно?

Отредактировано Ska1n (Июнь 11, 2012 12:25:43)

Офлайн

#6 Июнь 11, 2012 12:56:23

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

PIL и геометрическая трансформация изображения

Ska1n
В довесок можно еще вопрос? в какую степь глядеть: нужно в изображение сделать 2-3 прямоугольных дыры (в виде альфа-каналов), через ПИЛ это возможно?
http://stackoverflow.com/questions/4379978/python-pil-how-to-make-area-transparent-in-png

Офлайн

#7 Июнь 11, 2012 13:17:14

Ska1n
Зарегистрирован: 2012-06-10
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

PIL и геометрическая трансформация изображения

шикарно, спасибо большое

Офлайн

#8 Июнь 14, 2012 03:20:40

Ska1n
Зарегистрирован: 2012-06-10
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

PIL и геометрическая трансформация изображения

всплыла одна проблема: имеется прозрачная png картинка, при добавление прямоугольников и с последующей закраской их. теряется прозрачность оставшегося прозрачного куска, как-то можно это избежать?

Офлайн

#9 Июнь 14, 2012 08:12:34

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

PIL и геометрическая трансформация изображения

Код?

Офлайн

#10 Июнь 14, 2012 15:07:03

Ska1n
Зарегистрирован: 2012-06-10
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

PIL и геометрическая трансформация изображения

im = Image.open("One.png")
transparent_area = (tmp_s.param11,tmp_s.param12,tmp_s.param13,tmp_s.param14)
mask=Image.new('L', im.size, color=255)
draw=ImageDraw.Draw(mask)
draw.rectangle(transparent_area, fill=0)
im.putalpha(mask)
out = im.transform(im.size,Image.PERSPECTIVE ,(persp1),getattr(Image, 'BICUBIC'))
out.save("two.png", "PNG")

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version