使用 python 魔杖替换颜色但坐标未知
Replace a color using python Wand but coordinates unknown
我知道 and 但它们都使用类似
的行
draw.color(192,84,'replace')
其中需要传递相关颜色像素的位置。如果您知道要替换的颜色但不知道其位置怎么办?我想在不传递对该颜色像素位置的引用的情况下替换图像中像素的颜色。您真的需要扫描整个图像来寻找您已经知道的东西吗?
imagemagick 等价物是
convert balloon.gif -fill white -opaque blue balloon_white.gif
如果您想匹配 -opaque
功能,则需要实施 MagickOpaquePaintImage
C 方法。
import ctypes
from wand.api import library
from wand.image import Image
from wand.color import Color
from wand.compat import nested
# Map C-API to Python
library.MagickOpaquePaintImage.argtypes = (ctypes.c_void_p, # Wand
ctypes.c_void_p, # target
ctypes.c_void_p, # fill
ctypes.c_double, # fuzz
ctypes.c_bool) # invert
with Image(filename='rose:') as img:
with nested(Color('#E93A43'), Color('ORANGE')) as (target, fill):
library.MagickOpaquePaintImage(img.wand,
target.resource,
fill.resource,
img.quantum_range * 0.10, # -fuzz 10%
False)
img.save(filename='output.png')
自 wand 0.5.4 以来,方法 opaque_paint
是 available,因此不再需要 @emcconville 提出的聪明技巧。你可以这样做:
from wand.image import Image
with Image(filename='rose:') as im:
im.opaque_paint(target='#E93A43', fill='Orange', fuzz=0.10)
im.save(filename='output.png')
我知道
draw.color(192,84,'replace')
其中需要传递相关颜色像素的位置。如果您知道要替换的颜色但不知道其位置怎么办?我想在不传递对该颜色像素位置的引用的情况下替换图像中像素的颜色。您真的需要扫描整个图像来寻找您已经知道的东西吗?
imagemagick 等价物是
convert balloon.gif -fill white -opaque blue balloon_white.gif
如果您想匹配 -opaque
功能,则需要实施 MagickOpaquePaintImage
C 方法。
import ctypes
from wand.api import library
from wand.image import Image
from wand.color import Color
from wand.compat import nested
# Map C-API to Python
library.MagickOpaquePaintImage.argtypes = (ctypes.c_void_p, # Wand
ctypes.c_void_p, # target
ctypes.c_void_p, # fill
ctypes.c_double, # fuzz
ctypes.c_bool) # invert
with Image(filename='rose:') as img:
with nested(Color('#E93A43'), Color('ORANGE')) as (target, fill):
library.MagickOpaquePaintImage(img.wand,
target.resource,
fill.resource,
img.quantum_range * 0.10, # -fuzz 10%
False)
img.save(filename='output.png')
自 wand 0.5.4 以来,方法 opaque_paint
是 available,因此不再需要 @emcconville 提出的聪明技巧。你可以这样做:
from wand.image import Image
with Image(filename='rose:') as im:
im.opaque_paint(target='#E93A43', fill='Orange', fuzz=0.10)
im.save(filename='output.png')