Уведомления

Группа в Telegram: @pythonsu

#1 Март 8, 2010 19:19:38

pyOut
От:
Зарегистрирован: 2006-07-16
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Полупрозрачность нового слоя в PIL

Приветсвтую,

Нужно наложить на изображение новый слой белого изображения и сделать новый слой полупрозрачным. Как такое можно сделать?
Делаю следующим образом, но никакого эффекта оно мне не дает:

def _blink(image):
blink = Image.new('RGBA', (image.size[0], image.size[1]))

blink.paste((255, 255, 255, 180), (0, 0, image.size[0], image.size[1]), image)

blink.paste(image, (0, 0, image.size[0], image.size[1]), image)
return blink



Офлайн

#2 Март 11, 2010 12:46:31

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Полупрозрачность нового слоя в PIL

Все просто:

img=Image.open('test.jpg')
r,g,b=img.split()
a=Image.new('L',img.size,0xcc)
out=Image.merge('RGBA',(r,g,b,a))
out.save('test.png')



Офлайн

#3 Март 11, 2010 20:39:46

pyOut
От:
Зарегистрирован: 2006-07-16
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Полупрозрачность нового слоя в PIL

igor.kaist, что-то у меня не так работает как хотелось бы. Может быть я просто не правильно выразился.
Есть код:

def _blink(image):
# Мое изображение RGBA, при не указании параметра a выдает ошибку
r, g, b, a = image.split()
blink = Image.new('L', (image.size[0], image.size[1]), 0xcc)
image = Image.merge('RGBA',(r, g, b, blink))

return image
Цвет фона у меня белый поэтому я хочу чтобу чтобы верхняя половина изображения получила эффект полупрозрачности. Т.е. мне нужно наложить на верхнюю половину изображения белый слой и сделать ему прозразчность 0.5. А при текущем коде она этого не делает.



Отредактировано (Март 11, 2010 20:41:17)

Офлайн

#4 Март 11, 2010 22:15:52

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Полупрозрачность нового слоя в PIL

pyOut
Т.е. мне нужно наложить на верхнюю половину изображения белый слой и сделать ему прозразчность 0.5
у alpha канала нет цвета….
если вам точно известно, какую часть изображения нужно сделать прозрачной (верхняя половина), то просто закрасьте нужный прямоугольник blink с помощью ImageDraw
P.S. если я вас не правильно понял, приведите пример картинки как это должно выглядеть. До и после.



Отредактировано (Март 11, 2010 22:29:50)

Офлайн

#5 Март 12, 2010 22:11:35

pyOut
От:
Зарегистрирован: 2006-07-16
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Полупрозрачность нового слоя в PIL

igor.kaist, не понял. Можешь привести примерчик?



Офлайн

#6 Март 13, 2010 11:44:19

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Полупрозрачность нового слоя в PIL

pyOut
Можешь привести примерчик?
Наоборот, приведи примерчик того что тебе нужно :) покажи картинки “до” и “после”, а я тебе напишу как это сделать…



Отредактировано (Март 13, 2010 11:44:51)

Офлайн

#7 Март 13, 2010 15:59:24

pyOut
От:
Зарегистрирован: 2006-07-16
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Полупрозрачность нового слоя в PIL

igor.kaist, ok :)

Примерно нужно сделать следующее:

Исходное изображение:
http://img194.imageshack.us/i/beforef.png/
Результирующее изображение:
http://img638.imageshack.us/i/afterc.png/



Офлайн

#8 Март 13, 2010 18:33:55

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Полупрозрачность нового слоя в PIL

Все, понял :)

import Image
img=Image.open('test.jpg')

# создаем белый слой, высотой в половину оригинала
white_layer=Image.new('RGB',(img.size[0],img.size[1]/2),'white')
# создаем маску прозрачности, тоже высотой в половину оригинала
mask=Image.new('L',(img.size[0],img.size[1]/2),0x7f)
# вставляем белый слой, используя маску прозрачности
img.paste(white_layer,(0,0),mask=mask)
# profit....
img.save('test.png')
Результат:


P.S. Для работы с PIL всегда держу под рукой PIL Handbook.pdf



Отредактировано (Март 13, 2010 18:52:12)

Офлайн

#9 Март 13, 2010 20:44:39

pyOut
От:
Зарегистрирован: 2006-07-16
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Полупрозрачность нового слоя в PIL

igor.kaist, спасибо то что нужно и отдельное спасибо за хендбук. Скажи пожалуйста, а если изображение является прозрачным т.е. без фона код сильно измениться чтобы добавить полупрозрачность на изображение без фона?



Офлайн

#10 Март 14, 2010 08:45:57

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Полупрозрачность нового слоя в PIL

pyOut
код сильно измениться чтобы добавить полупрозрачность на изображение без фона?
Ну смотри пост #2, там код как раз это делает.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version