Как сделать линейку - календарь?

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

Модераторы: Olej, adminn

Правила форума
Все сообщения не по теме форума будут, без каких либо уведомлений, удаляться, а их авторы - убираться из регистрации.
Язык сообщений - исключительно русский.
bose
Писатель
Сообщения: 107
Зарегистрирован: 23 фев 2012, 14:41
Откуда: Киев
Контактная информация:

Re: Как сделать линейку - календарь?

Непрочитанное сообщение bose » 29 мар 2012, 16:09

Olej писал(а): 2. где вы взяли ваш schet.png?
Наджимпил с помощью резинки )))
Вложения
schet.png тут
schet.png тут
schet.png (15.73 КБ) 8011 просмотров

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Как сделать линейку - календарь?

Непрочитанное сообщение Olej » 29 мар 2012, 16:23

bose писал(а):Ну собсно сам скрипт прикрепил вместе с результатом работы (на Python). Скрипт рабочий.
Любопытно стало.
Решил проверить ... последнее утверждение ;-)
("верить нельзя никому"(с) гаупштурмфюрер Мюллер)
bose писал(а): Нужно установить только саму библиотеку PIL (http://www.pythonware.com/products/pil/index.htm)
... учитывая, что в README по инсталляции библиотеки не сказано, что выполнять:

Код: Выделить всё

$ sudo python setup.py install
- нужно под root ... а выполнять неизвестный скрипт сборки под root - стрёмно ;-)
Ну ладно:

Код: Выделить всё

...
running build_ext
--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version       1.1.7
platform      linux2 2.7 (r27:82500, Sep 16 2010, 18:03:06)
              [GCC 4.5.1 20100907 (Red Hat 4.5.1-3)]
--------------------------------------------------------------------
*** TKINTER support not available (Tcl/Tk 8.5 libraries needed)
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
--- LITTLECMS support available
--------------------------------------------------------------------
...
Writing /usr/lib/python2.7/site-packages/PIL/PIL-1.1.7-py2.7.egg-info
creating /usr/lib/python2.7/site-packages/PIL.pth
- стал? ;-)

Всё равно, скрипту "что в лоб что по-лбу":

Код: Выделить всё

[olej@notebook 29]$ python -v text2image.py test.png  30/1/2010
...
# /usr/lib/python2.7/site-packages/PIL/BmpImagePlugin.pyc matches /usr/lib/python2.7/site-packages/PIL/BmpImagePlugin.py
import PIL.BmpImagePlugin # precompiled from /usr/lib/python2.7/site-packages/PIL/BmpImagePlugin.pyc
# /usr/lib/python2.7/site-packages/PIL/ImageFile.pyc matches /usr/lib/python2.7/site-packages/PIL/ImageFile.py
import PIL.ImageFile # precompiled from /usr/lib/python2.7/site-packages/PIL/ImageFile.pyc
# /usr/lib/python2.7/site-packages/PIL/GifImagePlugin.pyc matches /usr/lib/python2.7/site-packages/PIL/GifImagePlugin.py
import PIL.GifImagePlugin # precompiled from /usr/lib/python2.7/site-packages/PIL/GifImagePlugin.pyc
# /usr/lib/python2.7/site-packages/PIL/JpegImagePlugin.pyc matches /usr/lib/python2.7/site-packages/PIL/JpegImagePlugin.py
import PIL.JpegImagePlugin # precompiled from /usr/lib/python2.7/site-packages/PIL/JpegImagePlugin.pyc
# /usr/lib/python2.7/site-packages/PIL/PpmImagePlugin.pyc matches /usr/lib/python2.7/site-packages/PIL/PpmImagePlugin.py
import PIL.PpmImagePlugin # precompiled from /usr/lib/python2.7/site-packages/PIL/PpmImagePlugin.pyc
# /usr/lib/python2.7/site-packages/PIL/PngImagePlugin.pyc matches /usr/lib/python2.7/site-packages/PIL/PngImagePlugin.py
import PIL.PngImagePlugin # precompiled from /usr/lib/python2.7/site-packages/PIL/PngImagePlugin.pyc
...
Такое впечатление, что ошибок явных не сообщается, но рисовать он ничего не собирается :twisted:
P.S. я, правда, не вникал в параметры запуска и что там ему нужно...
Но мой test.png - это скопированный с вашего результата ваш schet.png, только уже с подписями :lol:

bose
Писатель
Сообщения: 107
Зарегистрирован: 23 фев 2012, 14:41
Откуда: Киев
Контактная информация:

Re: Как сделать линейку - календарь?

Непрочитанное сообщение bose » 29 мар 2012, 16:55

Olej писал(а): 1. Первое, навскидку, замечание, что когда (наверное?) библиотека PIL ещё не установлена, оно умирает молча, без единого слова, ... как партизан на допросе в гестапо:
Питоновые скрипты обычно распространяются через PYPI в пакете (два варианта - distutils или setuptools). Обычно все зависимости прописываются там (setup.py). Затем инсталяторы (типа easy_install) автоматом подтягивают недостающие зависимые пакеты.
В данном случае подобного "удовольствия" нет, тем более я предупредил что нужно доустановить библиотеку. Ну а обойти это можно просто:

Код: Выделить всё

try:
    from PIL import Image
    from PIL import ImageDraw
    from PIL import ImageFont
    from PIL import ImageColor
except ImportError,ex:
    print >> sys.stderr, "[%s] %s" % (ex.__class__.__name__,str(ex))
    print >> sys.stderr, "Download and install library PIL from here http://www.pythonware.com/products/pil/index.htm"
    sys.exit(1)
Внизу прикрепил патч:

Код: Выделить всё

patch text2image.py -i import.patch
Вложения
import.zip
Переименуйте *.zip в *.patch
(736 байт) 436 скачиваний

bose
Писатель
Сообщения: 107
Зарегистрирован: 23 фев 2012, 14:41
Откуда: Киев
Контактная информация:

Re: Как сделать линейку - календарь?

Непрочитанное сообщение bose » 29 мар 2012, 17:06

Olej писал(а): - стал? ;-)
Олег Иванович, вы кажется стали заложником своего дистрибутива )))
PIL для компиляции требует много зависимостей (как любая другая библиотека работающая с графикой - кодеки, компрессоры, форматы разные и т.п.) Под "форточкой" он кажется идёт с инсталятором в котором есть ВСЁ (
Лучше всего под дистрибутивом установить "родной" пакет ПИЛа... все зависимости должны подтянуться...
Нет возможности проверить, но кажется так:

Код: Выделить всё

yum install python-imaging

bose
Писатель
Сообщения: 107
Зарегистрирован: 23 фев 2012, 14:41
Откуда: Киев
Контактная информация:

Re: Как сделать линейку - календарь?

Непрочитанное сообщение bose » 29 мар 2012, 17:09

Olej писал(а): Но мой test.png - это скопированный с вашего результата ваш schet.png, только уже с подписями :lol:
В смысле - текст добавлен?
dmitriev писал(а): Мой вопрос, вероятно, плохо сформулирован.
Мне хочется написать скрипт, который будет создавать каждый день новую картинку с новым сроком.
Просто на машине.
Вопрос: Как написать такой скрипт?

dmitriev
Писатель
Сообщения: 461
Зарегистрирован: 12 янв 2009, 19:36
Контактная информация:

Re: Как сделать линейку - календарь?

Непрочитанное сообщение dmitriev » 29 мар 2012, 17:41

Не врубился в суть спора программистов.

За скрипт спасибо! Завтра буду разбираться с утра, на свежую голову.

Правда у меня тоже Fedora, как и у Олега.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Как сделать линейку - календарь?

Непрочитанное сообщение Olej » 29 мар 2012, 18:17

dmitriev писал(а):Не врубился в суть спора программистов.
За скрипт спасибо! Завтра буду разбираться с утра, на свежую голову.
Спора никакого нет.
Идёт обсуждение как этот скрипт заставить рисовать.
Пока ничего не выходит. :-?
dmitriev писал(а):Правда у меня тоже Fedora, как и у Олега.
Вот именно поэтому... ;-)

1. пакет рекомендовано (выше) ставить из репозитария дистрибутива, а не по URL проекта.

2. чтоб не гадать я ставил всё что imaging*:

Код: Выделить всё

[root@notebook ~]# yum install python-imaging*
...
и напоролся на неприятность (слишком быстро обновляют репозитарий Fedora):

Код: Выделить всё

...
Ошибка: Пакет: python-imaging-devel-1.1.7-2.fc14.i686 (fedora)
            Необходимо: python-imaging = 1.1.7-2.fc14
            Установлено: python-imaging-1.1.7-3.fc14.i686 (@updates-testing)
                python-imaging = 1.1.7-3.fc14
            Доступно: python-imaging-1.1.7-2.fc14.i686 (fedora)
                python-imaging = 1.1.7-2.fc14
...
- у меня стоит уже 1.1.7-3.fc14, а он хочет 1.1.7-2.fc14.

3. такое же может и у вас приключиться, лечится:

Код: Выделить всё

[root@notebook ~]# yum downgrade python-imaging*
...
Удалено:
  python-imaging.i686 0:1.1.7-3.fc14                                                                                                                                                  
Установлено:
  python-imaging.i686 0:1.1.7-2.fc14                                                                                                                                                  
Готово!
4. теперь можно:

Код: Выделить всё

[root@notebook ~]# yum install python-imaging*
...
New leaves:
  python-imaging-devel.i686
  python-imaging-sane.i686
  python-imaging-tk.i686
- чтоб мало не казалось - всё установлено! ;-)

5. ...

Код: Выделить всё

[olej@notebook 29]$ python text2image.py schet.png 30/1/2012
[olej@notebook 29]$ echo $?
0

- беззвучно (безрисовочно ;-) ) завершается и, похоже, завершается без кода ошибки.
Как искать будем?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Как сделать линейку - календарь?

Непрочитанное сообщение Olej » 29 мар 2012, 18:31

Olej писал(а): 5. ...

Код: Выделить всё

[olej@notebook 29]$ python text2image.py schet.png 30/1/2012
[olej@notebook 29]$ echo $?
0

- беззвучно (безрисовочно ;-) ) завершается и, похоже, завершается без кода ошибки.
Как искать будем?
Автор нигде не сказал о логике этого демо-приложения, или я невнимательно смотрел и недосмотрел...
И только когда полез читать исходный код .py программы понял логику работы программы:
- берёт исходное изображение, я чтоб смешнее было, проверил .jpg:

Код: Выделить всё

[olej@notebook 29]$ python text2image.py schet.jpg 20/03/2012
- и вписывая в него "что желаете?"...
- сохраняет его как файл .phg изображения с фиксированным именем test.png

Тогда всё ОК: ;-)
test.png
test.png (53.72 КБ) 8011 просмотров
P.S. Они таки соответствуют по формату своим расширениям, чтоб не сомневались:

Код: Выделить всё

[olej@notebook 29]$ file schet.jpg 
schet.jpg: JPEG image data, JFIF standard 1.01
[olej@notebook 29]$ file test.png 
test.png: PNG image data, 399 x 86, 8-bit/color RGB, non-interlaced

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Как сделать линейку - календарь?

Непрочитанное сообщение Olej » 29 мар 2012, 18:39

bose писал(а): Ну вот сходу на CPAN надыбал перловый модуль со схожим функционалом:
http://search.cpan.org/~lbrocard/Image- ... /Imlib2.pm
Ну тогда самое время и дать сравнительный вариант на Perl. 8-)

bose
Писатель
Сообщения: 107
Зарегистрирован: 23 фев 2012, 14:41
Откуда: Киев
Контактная информация:

Re: Как сделать линейку - календарь?

Непрочитанное сообщение bose » 29 мар 2012, 22:44

Olej писал(а): - беззвучно (безрисовочно ;-) ) завершается и, похоже, завершается без кода ошибки.
Как искать будем?

Автор нигде не сказал о логике этого демо-приложения, или я невнимательно смотрел и недосмотрел...
И только когда полез читать исходный код .py программы понял логику работы программы:
Ну да - как мёд так сразу ложкой ;-).

Тут конечно много замечаний и путей совершенствования:
1) Автоматизированая обработка параметров коммандной строки при помощи optparse
2) Ну о количестве возможных опций я не стау упоминать (имя выходного файла, цвет и размер шрифта, местоположение текста.....)
3) Контроль длины текста, в случае выхода за границы - обрезать или перенести (пересчитать параметры начала вывода)
4) Автоматизация определения местоположения шрифтов (если не указан явно), выбор кирилическитерпимого шрифта (я в комментариях писал что дефаультный шрифт - не лучший вариант, у меня он не поддерживает кирилицу)

Просто хотел показать что задача тривиальная и не нужно пользоваться какими то спецсредствами.
dmitriev писал(а): За скрипт спасибо! Завтра буду разбираться с утра, на свежую голову.
Правда у меня тоже Fedora, как и у Олега.
На что нужно обратить внимание:
1) Функция time_delta - которая определяет сколько времени прошло с одного числа по другое в разрезе день-месяц-год. (Есть небольшая проблема - так как не во всех годах одинаковое кол-во дней и месяц на месяц не похож также). Многие библиотечные функции определяют только разницу в секундах, часах при этом теряется много информации. Тут проблема решается
2) Определение позиции начала выводимого текста на картинке - нужно учитывать длину и высоту шрифта, длину и высоту шаблонной картинки. В случае заступа - текст переносить. Я не всё проконтролировал.
3) Работа с самим шрифтом - у меня дефолтный шрифт кирилицу отазался выводить - пишет кракозяблики. Эксперементировать не стал... Из описания функции мне не совсем понятно какое значение имеет поле fill (почему-то целое от 0 до 255)
Из документации:
http://www.pythonware.com/library/pil/h ... gedraw.htm
The fill option gives the colour to use for the text.
Хотя цвет по идее это RGB - что то вроде 0хАА00АА или (255,255,0) (если не брать во внимание прозрачность)

Ответить

Вернуться в «Общий по Linux и открытому софту»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей