Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отключение антиаляйзинга у шрифтов, pangocairo (antialias_none font option) 
:(
    Опции темы
@lex
Дата 12.10.2006, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 3.2.2004
Где: Москва

Репутация: нет
Всего: нет



Есть некоторый текст,который хочется преобразовать в картинку, с прозрачным фоном 
для этого я спользую pangocairo
но вот одна незадача слишком хорошая получается картинка smile 
проблема в том, что используется антиаляйзинг, а отключить его ну не как не получается smile
а жуть как нужно.

Вот код:
Код

    def texyToImage(self,mText,imW,imH,resultFile):

        antialiasType=cairo.ANTIALIAS_NONE

        surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, imW, imH)

        cContext=cairo.Context(surface)

#        fontOptions=cContext.get_font_options()
#        fontOptions.set_antialias(antialiasType)
#        cContext.set_font_options(fontOptions)

        cr = pangocairo.CairoContext(cContext)

#        cr.set_antialias(antialiasType)

        fontOptions=cr.get_font_options()
        fontOptions.set_antialias(antialiasType)
        cr.set_font_options(fontOptions)


        print "font options antialias set? =",cr.get_font_options().get_antialias()==antialiasType

        cr.set_source_rgba(0,0,0,0)
        #cr.rectangle(0, 0, imW, imH)

        #cr.fill()

        layout = cr.create_layout()
        layout.set_markup(mText)
        layout.set_width(imW*pango.SCALE)
        #set_alignment
        layout.set_alignment(self.tsAllgin)

        cr.update_layout(layout)
        cr.show_layout(layout)

        cr.save()
        surface.write_to_png(resultFile)



PM MAIL ICQ   Вверх
slav0nic
Дата 12.10.2006, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.5.2006

Репутация: 4
Всего: 5



попробуй
Код


import cairo, pangocairo, pango

def texyToImage(mText,imW,imH,resultFile):
    antialiasType=cairo.ANTIALIAS_NONE
    surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, imW, imH)
    cContext=cairo.Context(surface)
    #        fontOptions=cContext.get_font_options()
    #        fontOptions.set_antialias(antialiasType)
    #        cContext.set_font_options(fontOptions)
    cr = pangocairo.CairoContext(cContext)
    #        cr.set_antialias(antialiasType)
    fontOptions=cr.get_font_options()
    fontOptions.set_antialias(antialiasType)
    cr.set_font_options(fontOptions)
    print "font options antialias set? =",cr.get_font_options().get_antialias()==antialiasType
    cr.set_source_rgba(0,0,0,0)
    #cr.rectangle(0, 0, imW, imH)
    cr.fill()
    cr.set_source_rgba(0,0,0)
    layout = cr.create_layout()
    layout.set_markup(mText)
    layout.set_width(imW*pango.SCALE)
    #set_alignment
    #layout.set_alignment(self.tsAllgin)
    cr.update_layout(layout)
    cr.show_layout(layout)
    cr.save()
    surface.write_to_png(resultFile)

if __name__ == '__main__':
    texyToImage('text', 100, 200, '/tmp/test.png')


подсказал dk
--------------------
                                 python.com.ua 
PM MAIL WWW Jabber   Вверх
@lex
Дата 12.10.2006, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 3.2.2004
Где: Москва

Репутация: нет
Всего: нет



Неа не помогло - опять тот же красивый плавный переход между прозрачным фоном и тестом
а он как раз и не нужен smile
Это лучше видно на большом тексте
Код

# -*- coding: utf-8 -*-
...
...
if __name__=='__main__'
    text="<span  foreground='red' font_desc='Sans 90'><b>1 В начале было Слово, и Слово было у Бога, и Слово было Бог.</b></span>"
    texyToImage(text, 640, 480, 'test.png')


+ честно говоря между твоим и моим вариантом разница не велика 
а именно 
мой ваиант:
Код

   cr.set_source_rgba(0,0,0,0)
    #cr.rectangle(0, 0, imW, imH)
    #cr.fill()
    #cr.set_source_rgba(0,0,0)

твой вариант:
Код

    cr.set_source_rgba(0,0,0,0)
    #cr.rectangle(0, 0, imW, imH)
    cr.fill()
    cr.set_source_rgba(0,0,0)[

что-то непонятная идея аль я не пойму?

Это сообщение отредактировал(а) @lex - 12.10.2006, 19:49
PM MAIL ICQ   Вверх
Artemios
Дата 13.10.2006, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 18
Всего: 50



slav0nic, на твой пример получил следующее:
Цитата

AttributeError: 'cairo.FontOptions' object has no attribute 'set_antialias'




--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
pythonwin
Дата 13.10.2006, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



прошу прощения за оффтопп. 

как поставить cairo, pangocairo, pango? smile
PM WWW GTalk Jabber   Вверх
@lex
Дата 13.10.2006, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 3.2.2004
Где: Москва

Репутация: нет
Всего: нет



Цитата

AttributeError: 'cairo.FontOptions' object has no attribute 'set_antialias'

вероятно у тебя pyGTK более старая чем у меня (set_antialias у  cairo.FontOptions  появился недавно)

Цитата

как поставить cairo, pangocairo, pango

pango,cairo && pangocairo - это библиотеки на C. К счастью они имеют и
Python-ский  интерфейс. Pango и pangocairo входят в pygtk. 
cairo - вроде идёт в отдельном пакете. 
более подробно : PyGTK
cairo

Я использую debian (testing) поэтому для меня их установка выглядит
Цитата

aptitude install python-gtk2



Это сообщение отредактировал(а) @lex - 13.10.2006, 15:23
PM MAIL ICQ   Вверх
@lex
Дата 13.10.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 3.2.2004
Где: Москва

Репутация: нет
Всего: нет



доехал до дома решил посмотреть 
работу этого скрипта  (чем чёрт не шутит мб под. виндой за работает)
и сразу вижу:
Цитата

    fontOptions.set_antialias(antialiasType)
AttributeError: 'cairo.FontOptions' object has no attribute 'set_antialias'

смотрю версию pycairo - pycairo-1.0.2-1.win32-py2.4.exe
последняя - pycairo-1.2.2

PM MAIL ICQ   Вверх
slav0nic
Дата 13.10.2006, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.5.2006

Репутация: 4
Всего: 5



блин, даже не знаю, попробуй фильтры поюзать, я как-то карио не юзал и думаю другие темболее%) на гтк мало кто кодит=\
или поспрашивай на фриноде на #pygtk (мож и по каиро етсь канал)
--------------------
                                 python.com.ua 
PM MAIL WWW Jabber   Вверх
@lex
Дата 14.10.2006, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 3.2.2004
Где: Москва

Репутация: нет
Всего: нет



да вобщем мне не особо-то cairo & pango нужны-то, они 
вместе умеют много в отличие от PIL 

нужно научиться преобразовывать тескст аля html (жирный, подчёркнутый, .... установка align ... )
в картинку а с pango это делается в "3 строчки" благо у панго есть ейный Pango Markup Language ....

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.