我试着用PIL/Pillow输出一个大的,生成的图像,但是当图像大小变大时,它就会中断。
因此,基于我读到的内容,我正在尝试使用贵宾。
我生成的数据是RGB值的numpy数组。我想把它转换成重要人物的图像,这样我就可以保存它了。但是,我无法想出如何将像素数据输入到贵宾中。
import numpy
import gi
gi.require_version('Vips', '8.0')
from gi.repository import Vips
WIDTH=32768
HEIGHT=32768
UCHAR=Vips.BandFormat.UCHAR
# Create an RGB black image
black_space = numpy.zeros( ( WIDTH, HEIGHT, 3 ), dtype=numpy.uint8 )
# this doesn't work
vips_image = Vips.Image.new_from_memory( black_space, WIDTH, HEIGHT, bands=3, format=UCHAR )
vips_image.write_to_file( "space_32k.tiff" )当然,当创建Vips映像时,它会出现错误,从而失败:
Traceback (most recent call last):
File "./bad_vips.py", line 14, in <module>
vips_image = Vips.Image.new_from_memory( black_space, WIDTH, HEIGHT, bands=3, format=UCHAR )
TypeError: Item 0: expected int argument是否有一种方法来转换numpy数组,使其与Vips一起工作?
我也尝试过传递black_space.data,但之后我得到了:
NotImplementedError: Item 0: multi-dimensional sub-views are not implemented发布于 2018-11-28 05:26:21
您正在使用旧的libvips Python接口--现在有一个更新的接口,它要好得多:
https://github.com/libvips/pyvips
这里的医生:
https://libvips.github.io/pyvips/
有关于链接libvips和numpy的一节。你的例子是:
import numpy
import pyvips
WIDTH = 100
HEIGHT = 100
# Create an RGB black image
black_space = numpy.zeros((WIDTH, HEIGHT, 3), dtype=numpy.uint8)
# reshape into a huge linear array
linear = black_space.reshape(WIDTH * HEIGHT * 3)
vips_image = pyvips.Image.new_from_memory(linear.data, \
WIDTH, HEIGHT, bands=3, format="uchar")
vips_image.write_to_file("huge.tif")reshape是免费的(我认为),所以它应该是有效的。回购程序中也有一个示例程序:
https://github.com/libvips/pyvips/blob/master/examples/pil-numpy-pyvips.py
https://stackoverflow.com/questions/53512535
复制相似问题