mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
ImageMagick wrapper: Add convenience method to remove transparency from images
This commit is contained in:
parent
c9f96840cc
commit
5cc1c8ee65
@ -122,6 +122,21 @@ class ImageMagick(object):
|
|||||||
def __exit__(self, *args):
|
def __exit__(self, *args):
|
||||||
finalize()
|
finalize()
|
||||||
|
|
||||||
|
def remove_transparency(wand, background_color='white'):
|
||||||
|
'''
|
||||||
|
Converts transparent pixels to the specified background color.
|
||||||
|
Returns a new magick wand with the opaque image.
|
||||||
|
'''
|
||||||
|
nw = NewMagickWand()
|
||||||
|
pw = NewPixelWand()
|
||||||
|
if nw < 0 or pw < 0:
|
||||||
|
raise RuntimeError('Out of memory')
|
||||||
|
PixelSetColor(pw, background_color)
|
||||||
|
MagickNewImage(nw, MagickGetImageWidth(wand), MagickGetImageHeight(wand),
|
||||||
|
pw)
|
||||||
|
MagickCompositeImage(nw, wand, OverCompositeOp, 0, 0)
|
||||||
|
DestroyPixelWand(pw)
|
||||||
|
return nw
|
||||||
|
|
||||||
class MetricType(ctypes.c_int): pass
|
class MetricType(ctypes.c_int): pass
|
||||||
UndefinedMetric = MetricType(0)
|
UndefinedMetric = MetricType(0)
|
||||||
@ -730,6 +745,32 @@ class MagickStatusType(ctypes.c_void_p): pass
|
|||||||
class MagickInfo(ctypes.c_void_p): pass
|
class MagickInfo(ctypes.c_void_p): pass
|
||||||
class MagickWand(ctypes.c_void_p): pass
|
class MagickWand(ctypes.c_void_p): pass
|
||||||
|
|
||||||
|
# NewPixelWand
|
||||||
|
try:
|
||||||
|
_magick.NewPixelWand.restype = PixelWand
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
NewPixelWand = _magick.NewPixelWand
|
||||||
|
|
||||||
|
# MagickSetImageOpacity
|
||||||
|
try:
|
||||||
|
_magick.MagickSetImageOpacity.argtypes = (MagickWand, ctypes.c_double)
|
||||||
|
_magick.restype = MagickBooleanType
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
MagickSetImageOpacity = _magick.MagickSetImageOpacity
|
||||||
|
|
||||||
|
# MagickMergeImageLayers
|
||||||
|
try:
|
||||||
|
_magick.MagickMergeImageLayers.argtypes = (MagickWand, ImageLayerMethod)
|
||||||
|
_magick.MagickMergeImageLayers.restype = MagickWand
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
MagickMergeImageLayers = _magick.MagickMergeImageLayers
|
||||||
|
|
||||||
# MagickSetLastIterator
|
# MagickSetLastIterator
|
||||||
try:
|
try:
|
||||||
_magick.MagickSetLastIterator.restype = None
|
_magick.MagickSetLastIterator.restype = None
|
||||||
|
Loading…
x
Reference in New Issue
Block a user