Форум сайта python.su
Добрый день, подскажите, пожалуйста, с PIL только начал знакомиться, какими функциями можно реализовать следующее: хочется посредством PIL делать различного рода редактирования изображений, напоминающим функцию Distort в фотошопе - когда можно изображение тянуть по краям и текстура изображения будет либо сужаться, либо растягивать, прикрепил пример: вверху стандартная картинка, а внизу измененная.
Прикреплённый файлы:
pr.jpg (5,3 KБ)
Офлайн
нагуглил, что нужно смотреть в сторону, что-то типа такого
im.transform((1000,1000),Image.PERSPECTIVE ,(1, 0, 0, 0, 1, -100,0, .001))
Отредактировано Ska1n (Июнь 10, 2012 18:19:13)
Офлайн
вопрос решил методом перебора значений через явасрипт, но встал другой вопрос: какие лучше применить фильтры, чтобы качество картинки было приемлемым? у меня картинки в png формате, с прозрачным альфа-каналом. Допустим, в фотошопе изменяя, границы мягко смазываются и не так сильно искажает качество, как в PILe… пробовал связку DETAIL + SMOOTH, но все равно не ахти( может у кого есть решения?
Офлайн
Покажите код.
Подозреваю, что вы используете
Ska1nуже после того как изображение испорчено.
пробовал связку DETAIL + SMOOTH
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)
Офлайн
так точно, применял фильтр после искажений изображения
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")
Отредактировано Ska1n (Июнь 11, 2012 12:25:43)
Офлайн
Ska1nhttp://stackoverflow.com/questions/4379978/python-pil-how-to-make-area-transparent-in-png
В довесок можно еще вопрос? в какую степь глядеть: нужно в изображение сделать 2-3 прямоугольных дыры (в виде альфа-каналов), через ПИЛ это возможно?
Офлайн
шикарно, спасибо большое
Офлайн
всплыла одна проблема: имеется прозрачная png картинка, при добавление прямоугольников и с последующей закраской их. теряется прозрачность оставшегося прозрачного куска, как-то можно это избежать?
Офлайн
Код?
Офлайн
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")
Офлайн