Найти - Пользователи
Полная версия: Сделать черный фон прозрачным
Начало » Python для новичков » Сделать черный фон прозрачным
1
Suliman
Мне нужно в PNG сделать черный фон прозрачным.
Нашел следующий код:
from PIL import Image
img = Image.open('img.png')
img = img.convert("RGBA")
pixdata = img.load()
for y in xrange(img.size[1]):
    for x in xrange(img.size[0]):
        if pixdata[x, y] == (255, 255, 255, 255):
            pixdata[x, y] = (255, 255, 255, 0)
img.save("img2.png", "PNG")
по идее все правильно и ничего менять не надо, 255 становится нулем, который вроде как означает прозрачный фон. Но у меня скрипт сохраняет результирующий файл опять с черным фоном. Как быть?
dimy44
Вообще-то чёрный цвет никак не (255, 255, 255, …), а (0, 0, 0, …). В идеале. Возьмите за цвет фона например верхний левый пиксель, и сравнивайте с ним
jcrow
“Черноватый” тоже надо заменять прозрачностью.
Попробуйте так:
from PIL import Image
img = Image.open('img.png')
img = img.convert("RGBA")
pixdata = img.load()
for y in xrange(img.size[1]):
    for x in xrange(img.size[0]):
        if pixdata[x, y][0] <= 10 and pixdata[x, y][1] <= 10 and pixdata[x, y][2] <= 10:
            pixdata[x, y] = (0, 0, 0, 0)
img.save("img2.png", "PNG")
dimy44
Почему именно 10 ? Так взявши значение “с потолка” увеличиваются шансы задать прзрачные участки и на самом изображении. Нужно заранее смотреть цвет в нескольких заведомо известных точках background'а и исходя из диапазона, фильтровать. Хотя гарантий никаких быть не может, всё зависит от качества (компрессии) png.
jcrow
dimy44
Почему именно 10 ?
Ну, тогда 8.
dimy44
Это несерьёзно. Я написал выше, надо смотреть по факту какого цвета фон. Ну допустим для данного изображения прокатит, а у другого будет белый фон? К примеру.
jcrow
dimy44
Это несерьёзно.
Согласен. В общем случае задача сложнее, но в все равно, артефакты компрессии вынуждают под цветом фона подразумевать диапазон уровней, а не 0 или 255.
А для этого конкретного случая, мне кажется, задача решается ключиком imagemagick'а при повороте картинки ;)
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