魔杖将透明背景变为黑色
Wand turns transparent background to black
我正在尝试使用 Wand python 进行灰度化,但是当我这样做时
from wand.image import Image
with Image(filename='image.png') as img:
img.type = 'grayscale'
img.save(filename='image_gray.png')
它将透明背景变成黑色。如果我使用一个白色背景的,它就可以工作。我做错了什么。而且灰度是
Y = 0.2126 * RED + 0.7152 * GREEN + 0.0722 * BLUE
我在哪里可以在 Wand 中手动执行此操作,比如说我是否想稍微更改一下值。我查看了文档和各种论坛,但找不到任何答案,只有 photoshop 的东西。
谢谢!
这并没有回答你关于魔杖的问题......但你可以用 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
PNG 图像类型设置为灰度会删除透明层(参见 PNG docs)。一种选择是在设置灰度后启用 Alpha 通道。
img.alpha = True
# or
img.background_color = Color('transparent')
根据您的版本,这可能不起作用。
另一种选择
用 Image.modulate 改变颜色饱和度。
img.modulate(saturation=0.0)
另一种选择
改变颜色空间。
img.colorspace = 'gray'
# or
img.colorspace = 'rec709luma'
# or
img.colorspace = 'rec601luma'
另一种选择
如果你的版本有Image.fx
。以下将起作用
with img.fx('lightness') as gray_copy:
....
我正在尝试使用 Wand python 进行灰度化,但是当我这样做时
from wand.image import Image
with Image(filename='image.png') as img:
img.type = 'grayscale'
img.save(filename='image_gray.png')
它将透明背景变成黑色。如果我使用一个白色背景的,它就可以工作。我做错了什么。而且灰度是
Y = 0.2126 * RED + 0.7152 * GREEN + 0.0722 * BLUE
我在哪里可以在 Wand 中手动执行此操作,比如说我是否想稍微更改一下值。我查看了文档和各种论坛,但找不到任何答案,只有 photoshop 的东西。
谢谢!
这并没有回答你关于魔杖的问题......但你可以用 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
PNG 图像类型设置为灰度会删除透明层(参见 PNG docs)。一种选择是在设置灰度后启用 Alpha 通道。
img.alpha = True
# or
img.background_color = Color('transparent')
根据您的版本,这可能不起作用。
另一种选择
用 Image.modulate 改变颜色饱和度。
img.modulate(saturation=0.0)
另一种选择
改变颜色空间。
img.colorspace = 'gray'
# or
img.colorspace = 'rec709luma'
# or
img.colorspace = 'rec601luma'
另一种选择
如果你的版本有Image.fx
。以下将起作用
with img.fx('lightness') as gray_copy:
....