Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Объединение изображений


Автор: CalmNad 13.3.2008, 20:51
Доброго времени суток,

Такая проблема:
 - По текстовым командам выполняю рисование примитивов.
 - Примитивы (прямоугольник, линия, ...) могут иметь свою прозрачность
 - При объединении примитивов в общее изображение - последнее постепенно становится ну совсем прозрачным smile :(
 - Как я понимаю проблему - альфа канал складывается и более старые (первые) изображения становятся светлее.

Буду благодарен за советы, и очень благодарен за код smile. Если есть иные (принципиально) пути решения - готов выслушать/увидеть советы/примеры (например отрисовка с заданием прозрачности для каждого элемента на одном холсте).

Код следующий:

Код

def ImgDrawShape(resIm, command, cnt):
    tmpIm = Image.new('RGBA', (484, 382))
    ...отрисовка на tmpIm...
    resIm = ImgMerge(resIm, tmpIm, command['opacity'])
    return resIm

def ImgReduceOpacity(im, opacity):
    assert opacity >= 0 and opacity <= 1
    if im.mode != 'RGBA':
        im = im.convert('RGBA')
    alpha = im.split()[3]
    alpha = ImageEnhance.Brightness(alpha).enhance(opacity)
    im.putalpha(alpha)
    return im

def ImgMerge(dst, src, opacity=1):
    if opacity < 1:
        src = ImgReduceOpacity(src, opacity)
    dst.paste(src, (0,0), src)
    return dst

Автор: Goganchic 14.3.2008, 16:48
CalmNad, можешь написать более подробно, например указать что используешь для работы с графикой и т.п.

Автор: pythonwin 17.3.2008, 12:03
Цитата(Goganchic @  14.3.2008,  19:48 Найти цитируемый пост)
CalmNad, можешь написать более подробно, например указать что используешь для работы с графикой и т.п. 

думаю CalmNad, использует PIL, т.к.:
Код

>>> import PIL, PIL.Image
>>> tmpIm = PIL.Image.new('RGBA', (484, 382))
>>> tmpIm
<PIL.Image.Image instance at 0xb7d701cc>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)