Найти - Пользователи
Полная версия: Замена белого на прозрачный с помощью PIL
Начало » Python для новичков » Замена белого на прозрачный с помощью PIL
1 2
squtter
Суть.
Есть картинка с белым фоном. На странице рисуется с помощью 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()
Задача заменить все белые пиксели в картинке на прозрачные.
Перерыл весь PIL и интернет, может и глаз уже замылил, но никак не нахожу решения.
Заранее спасибо.
igor.kaist
Попробуй воспользоваться поиском по форуму. Я лично отвечал уже на подобный вопрос :)
squtter
igor.kaist
Попробуй воспользоваться поиском по форуму. Я лично отвечал уже на подобный вопрос :)
я написал вроде, что “Перерыл весь PIL и интернет, может и глаз уже замылил, но никак не нахожу решения. ”

и ты уверен, что твой ответ соответствует моему вопросу?!
думаешь, тупо второй день сижу и жду когда мне совет дадут?

взял бы и запостил ссылку, а чего так воздух сотрясать… лучше бы уж и не писал ничего…
igor.kaist
http://python.su/forum/viewtopic.php?id=3596
Вот пример работы с прозрачностью, заодно видно, как работать с цветовыми каналами.
squtter
взял бы и запостил ссылку, а чего так воздух сотрясать… лучше бы уж и не писал ничего…
тебе самому лень набрать в строке поиска “PIL” или подумать? И нечего грубить….
squtter
igor.kaist
тебе самому лень набрать в строке поиска “PIL” или подумать? И нечего грубить….
тебе никто не грубил…
перед тем как постить свой вопрос, я изучил форум на предмет возможного ответа..
а на форум я попал через яндекс, найдя этот твой пост… :)
если бы он мне помог, я бы и не спрашивал…
а если бы ты по существу ответил сразу, не было этого ненужного диалога.. твои посты не лечат, поэтому, чтобы отсылать в поиск, вник бы сначала в вопрос… ;)
Ferroman
igor.kaist
Он прав, я тоже в поиске по форуму ничего полезного в данном вопросе не нашел., хотя все ветки по слову PIL просмотрел внимательно.
squtter
Есть point. Просто нужно будет передать ему функцию, которая заменит цвет пиксела одного цвета на нужный.
squtter
Ferroman
Просто нужно будет передать ему функцию, которая заменит цвет пиксела одного цвета на нужный.
Спасибо, Ferroman.
Будет превосходно, если подскажете, как это сделать…. :rolleyes:
squtter
то есть, например, имеем:

imR, imG, imB, imA = im.split()
imA = imA.point(lambda pixel: 128)
outfile = Image.merge('RGBA', (imR, imG, imB, imA))

при таком раскладе получаем полупрозрачность на всю картинку..
значит, надо выполнять такую функцию, когда и imR, и imG, и imB для конкретной точки равны 255.. правильно?
если да, то как это сделать?
Ferroman
Честно говоря, я PIL не использовал вообще :) Я просто не знаю как они там представляются.
Можно просто
imA = imA.point(lambda x: (x == <значение белого> and x) or <значение прозрачности>)
squtter
да вот, не так все просто получается..
вернее, не получается…

как я понимаю, 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)
но вот как получить эти r, g, b для каждой точки внутри labmda?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB