Форум сайта python.su
Суть.
Есть картинка с белым фоном. На странице рисуется с помощью PIL:
def __call__(self, id_comp, shop, size=80, filename=''):
imgdata = StringIO.StringIO()
self.request.response.setHeader('Content-Type', 'image/png')
im = Image.open(self.getImagePath(id_comp, shop, filename))
im.thumbnail((size, size), Image.ANTIALIAS)
im.save(imgdata, 'JPEG', quality=70)
return imgdata.getvalue()
Отредактировано (Март 29, 2009 22:01:45)
Офлайн
Попробуй воспользоваться поиском по форуму. Я лично отвечал уже на подобный вопрос :)
Офлайн
igor.kaistя написал вроде, что “Перерыл весь PIL и интернет, может и глаз уже замылил, но никак не нахожу решения. ”
Попробуй воспользоваться поиском по форуму. Я лично отвечал уже на подобный вопрос :)
Офлайн
http://python.su/forum/viewtopic.php?id=3596
Вот пример работы с прозрачностью, заодно видно, как работать с цветовыми каналами.
squtterтебе самому лень набрать в строке поиска “PIL” или подумать? И нечего грубить….
взял бы и запостил ссылку, а чего так воздух сотрясать… лучше бы уж и не писал ничего…
Офлайн
igor.kaistтебе никто не грубил…
тебе самому лень набрать в строке поиска “PIL” или подумать? И нечего грубить….
Отредактировано (Март 29, 2009 12:37:47)
Офлайн
igor.kaist
Он прав, я тоже в поиске по форуму ничего полезного в данном вопросе не нашел., хотя все ветки по слову PIL просмотрел внимательно.
squtter
Есть point. Просто нужно будет передать ему функцию, которая заменит цвет пиксела одного цвета на нужный.
Офлайн
FerromanСпасибо, Ferroman.
Просто нужно будет передать ему функцию, которая заменит цвет пиксела одного цвета на нужный.
Офлайн
то есть, например, имеем:
imR, imG, imB, imA = im.split()
imA = imA.point(lambda pixel: 128)
outfile = Image.merge('RGBA', (imR, imG, imB, imA))
при таком раскладе получаем полупрозрачность на всю картинку..
значит, надо выполнять такую функцию, когда и imR, и imG, и imB для конкретной точки равны 255.. правильно?
если да, то как это сделать?
Отредактировано (Март 29, 2009 14:30:37)
Офлайн
Честно говоря, я PIL не использовал вообще :) Я просто не знаю как они там представляются.
Можно просто
imA = imA.point(lambda x: (x == <значение белого> and x) or <значение прозрачности>)
Офлайн
да вот, не так все просто получается..
вернее, не получается…
как я понимаю, split раскладывает картинку на каналы RGB и A- альфа…
Ferromanя примерно об этом же и сказал, но у вас здесь идет обработка альфа-канала и, соответственно, у него нет значения белого…
imA = imA.point(lambda x: (x == <значение белого> and x) or <значение прозрачности>)
imA = imA.point(lambda x: (r == 255 and g ==255 and b ==255) and 0)
Отредактировано (Март 29, 2009 22:01:17)
Офлайн