用C实现的PIL部分在
PIL._imaging模块中,您也可以在
Image.core之后使用
from PIL importImage。当前版本的Pillow为每个
PIL.Image.Image实例赋予一个名为成员的成员
im,该成员是实例的成员,该成员
ImagingCore定义在
PIL._imaging。您可以使用列出其方法
help(oldimage.im),但是这些方法本身在Python中均未记录。
对象的
convert方法在
ImagingCore中实现
_imaging.c。它需要一到三个参数,并创建一个新的
ImagingCore对象(称为
Imaging_Type内部
_imaging.c)。
mode
(必需):模式字符串(例如"P"
)dither
(可选,默认为0):PIL传递0或1paletteimage
(可选):ImagingCore
带有调色板的
我面临的问题是,
quantize()在
dist-packages/PIL/Image.py力的
dither参数1。所以我把副本
quantize()方法出来,改变了这一切。这可能在将来的Pillow版本中不起作用,但如果不能,则他们很可能会实现“
quantize()承诺的更高版本中的扩展量化器接口”
。
#!/usr/bin/env python3from PIL import Imagedef quantizetopalette(silf, palette, dither=False): """Convert an RGB or L mode image to use a given P image's palette.""" silf.load() # use palette from reference image palette.load() if palette.mode != "P": raise ValueError("bad mode for palette image") if silf.mode != "RGB" and silf.mode != "L": raise ValueError( "only RGB or L mode images can be quantized to a palette" ) im = silf.im.convert("P", 1 if dither else 0, palette.im) # the 0 above means turn OFF dithering # Later versions of Pillow (4.x) rename _makeself to _new try: return silf._new(im) except AttributeError: return silf._makeself(im)palettedata = [0, 0, 0, 102, 102, 102, 176, 176, 176, 255, 255, 255]palimage = Image.new('P', (16, 16))palimage.putpalette(palettedata * 64)oldimage = Image.open("School_scrollable1.png")newimage = quantizetopalette(oldimage, palimage, dither=False)newimage.show()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)