Форум сайта python.su
0
Суть.
Есть картинка с белым фоном. На странице рисуется с помощью 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)
Офлайн
3
Попробуй воспользоваться поиском по форуму. Я лично отвечал уже на подобный вопрос :)
Офлайн
0
igor.kaistя написал вроде, что “Перерыл весь PIL и интернет, может и глаз уже замылил, но никак не нахожу решения. ”
Попробуй воспользоваться поиском по форуму. Я лично отвечал уже на подобный вопрос :)
Офлайн
3
http://python.su/forum/viewtopic.php?id=3596
Вот пример работы с прозрачностью, заодно видно, как работать с цветовыми каналами.
squtterтебе самому лень набрать в строке поиска “PIL” или подумать? И нечего грубить….
взял бы и запостил ссылку, а чего так воздух сотрясать… лучше бы уж и не писал ничего…
Офлайн
0
igor.kaistтебе никто не грубил…
тебе самому лень набрать в строке поиска “PIL” или подумать? И нечего грубить….
Отредактировано (Март 29, 2009 12:37:47)
Офлайн
1
igor.kaist
Он прав, я тоже в поиске по форуму ничего полезного в данном вопросе не нашел., хотя все ветки по слову PIL просмотрел внимательно.
squtter
Есть point. Просто нужно будет передать ему функцию, которая заменит цвет пиксела одного цвета на нужный.
Офлайн
0
FerromanСпасибо, Ferroman.
Просто нужно будет передать ему функцию, которая заменит цвет пиксела одного цвета на нужный.
Офлайн
0
то есть, например, имеем:
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)
Офлайн
1
Честно говоря, я PIL не использовал вообще :) Я просто не знаю как они там представляются.
Можно просто
imA = imA.point(lambda x: (x == <значение белого> and x) or <значение прозрачности>)
Офлайн
0
да вот, не так все просто получается..
вернее, не получается…
как я понимаю, 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)
Офлайн