2015-07-31 2 views
2

Я пытаюсь оттенки серого с помощью pyhton Wand, но когда яWand получается прозрачный черный фон

from wand.image import Image 
with Image(filename='image.png') as img: 
    img.type = 'grayscale' 
    img.save(filename='image_gray.png') 

получается прозрачный фон в черный цвет. Если я использую один с белым фоном, он работает. Что я делаю неправильно. А также, как grayscaling является

Y = 0.2126 * RED + 0.7152 * GREEN + 0.0722 * BLUE 

Где я могу это сделать вручную Wand, скажем, если я хочу, чтобы изменить значение немного. Я смотрел документацию и на разных форумах, но я не мог найти ответа, только материал для фотошопа.

Спасибо!

+1

JPEG не имеет прозрачности, так что вы хотите, чтобы фон последовательно превращался в белый? –

+0

Справа, извините, я отправил неправильный код, я его отредактировал. Означает ли это, что я должен сначала преобразовать каждое изображение в jpg и не иметь оттенки серого? – Tom

ответ

3

PNG тип изображения установлен в оттенках серого г создает прозрачный слой (см. PNG docs). Один из вариантов - включить альфа-канал после установки оттенков серого.

img.alpha = True 
# or 
img.background_color = Color('transparent') 

В зависимости от версии у вас есть, это может не сработать.

Другой вариант

Alter насыщенность цвета с Image.modulate.

img.modulate(saturation=0.0) 

Другой вариант

Alter о цветовом.

img.colorspace = 'gray' 
# or 
img.colorspace = 'rec709luma' 
# or 
img.colorspace = 'rec601luma' 

Другой вариант

Если ваша версия имеет Image.fx. Следующее будет работать

with img.fx('lightness') as gray_copy: 
    .... 
+0

ok thanks Второй и третий вариант работает. Первый - нет, но мне нравится, какая версия мне нужна? И последний вариант, что такое image.fx? И наконец, где вы нашли коды для цветового пространства? Я не мог найти его нигде в документации – Tom

+0

@PaulBernhardWagner все еще понимает это. Цветовые структуры C-API IM изменились с предстоящим IM7, а следующая итерация wan 0.4.1 будет включать в себя некоторые перезаписи. – emcconville

+0

ОК, отлично, спасибо! как работает image.fx? – Tom

1

это оленья кожа ответить на ваш вопрос о палочке ... но вы можете сделать это достаточно легко только с PIL ...

from PIL import Image 
from math import ceil 
import q 
def CalcLuminosity(RED,GREEN,BLUE): 
    return int(ceil(0.2126 * RED + 0.7152 * GREEN + 0.0722 * BLUE)) 

im = Image.open('bird.jpg') 
# im.convert("L") will apply the standard luminosity mapping 

data = [CalcLuminosity(*im.getpixel((c,r))) for r in range(im.height) for c in range(im.width) ] 

#now make our new image using our luminosity values 
x = Image.new("L",(im.width,im.height)) 
image_px = x.load() 
for c in range(im.width): 
    for r in range(im.height): 
     image_px[c,r] = data[r*im.width+c] 

x.save("output.jpg") 

или если вы хотите ограничить экстремумы на основе порога

#now make our new image using our luminosity values 
x = Image.new("L",(im.width,im.height)) 
image_px = x.load() 
for c in range(im.width): 
    for r in range(im.height): 
     image_px[c,r] = 0 if data[r*im.width+c] < 120 else 255 

x.save("output.jpg") 

или если вы хотите, чтобы отфильтровать один цвет Шанель

def CalcLuminosityBLUE(RED,GREEN,BLUE): 
    return BLUE 
+0

спасибо, я попробую это, мне нравится этот, потому что вы можете редактировать оттенки серого – Tom

Смежные вопросы