Страницы

Поиск по вопросам

Показаны сообщения с ярлыком pillow. Показать все сообщения
Показаны сообщения с ярлыком pillow. Показать все сообщения

воскресенье, 29 декабря 2019 г.

Питон, построить пятиугольник

#python #pillow


Задание такое: построить правильный пятиугольник со стороной a.

Тут обязательно должна использоваться библиотека Pillow.

Вот мой код:

import PIL
from PIL import Image, ImageDraw
a=int(input("Введите размер стороны а: "))

img = Image.new("RGB",(700,700), (2555,255,255))
draw = ImageDraw.Draw(img)
draw.polygon((0.6*a,1.4*a, 1.3*a,0.9*a, 2*a,1.4*a, 1.7*a,2.2*a ,0.9*a,2.2*a), fill="lightblue",outline
=(255,0,0))

img.show()


Координаты подбирал сам, и в общем то, пятиугольник похож на правильный, но доказать
это не просто. 
Также сделали замечание, что сторона "a" должна вводиться с клавиатуры в пикселях,
а у меня получается своя условная единица.. Еще каким то образом нужно на картинке
подписать "Это пятиугольник". 

Вот результат работы моей программы:


    


Ответы

Ответ 1



Зачем подбирать координаты, если их можно вычислить? import math from PIL import Image, ImageDraw, ImageFont x=250 #центр полигона (x) y=250 #центр полигона (y) n=5 #число сторон полигона r=200 #радиус окружности в которую вписываем полигон #получаем координаты вершин coords=[(x + r * math.cos(2 * math.pi * i / n), y + r * math.sin(2 * math.pi * i / n)) for i in range(1, n+1)] img = Image.new("RGB",(500,500), (255,255,255)) draw = ImageDraw.Draw(img) draw.polygon((coords), fill="lightblue",outline =(255,0,0)) unicode_font = ImageFont.truetype("arial.ttf", 22) draw.text ((100,40), u'Это многоугольник', font=unicode_font, fill='red' ) img.show() Ну, и поскольку изначально дается длина стороны, то радиус описываемой окружности тоже легко вычислить: r = side/(2*math.sin(math.pi/n)) #side - длина стороны, n - количество сторон

воскресенье, 7 июля 2019 г.

Не грузится шрифт в Python Pillow

Код:
from PIL import Image, ImageColor, ImageDraw, ImageFont
spam1=Image.new("RGB", (1500, 1000), "#000096") spam2=ImageFont.load("arial.pil") spam3=ImageDraw.Draw(spam1) spam3.text((1450, 950), "IAmGM", font=spam2) spam1.save("hello.png")
Результат:
C:\Users\Admin\AppData\Local\Programs\Python\Python36-32\python.exe C:/Users/Admin/Desktop/Gosha/experiment.py Traceback (most recent call last): File "C:/Users/Admin/Desktop/Gosha/experiment.py", line 4, in spam2=ImageFont.load("arial.pil") File "C:\Users\Admin\AppData\Local\Programs\Python\Python36-32\lib\site-packages\PIL\ImageFont.py", line 229, in load f._load_pilfont(filename) File "C:\Users\Admin\AppData\Local\Programs\Python\Python36-32\lib\site-packages\PIL\ImageFont.py", line 69, in _load_pilfont with open(filename, "rb") as fp: FileNotFoundError: [Errno 2] No such file or directory: 'arial.pil'
И что делать?


Ответ

Скорее всего у вас отсутствует файл с растровым шрифтом "arial.pil" или расположен в другой директории (в этом случае укажите полный путь к файлу).
PIL начиная с версии 1.1.4 поддерживает шрифты TrueType и OpenType типов. Под Windows если указанный файл шрифта найти не удалось, ImageFont.truetype() ищет указанный файл также в директории %SystemRoot%/fonts (например: C:\Windows\fonts) :
spam2=ImageFont.truetype("arial.ttf")
из Docstring:
In [7]: ImageFont.truetype? Signature: ImageFont.truetype(font=None, size=10, index=0, encoding='', layout_engine=None) Docstring: Load a TrueType or OpenType font from a file or file-like object, and create a font object. This function loads a font object from the given file or file-like object, and creates a font object for a font of the given size.
This function requires the _imagingft service.
:param font: A filename or file-like object containing a TrueType font. Under Windows, if the file is not found in this filename, the loader also looks in Windows :file:`fonts/` directory. ...