Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 执行图像棱锥体时的libvips和填充_Image Processing_Gdal_Vips - Fatal编程技术网

Image processing 执行图像棱锥体时的libvips和填充

Image processing 执行图像棱锥体时的libvips和填充,image-processing,gdal,vips,Image Processing,Gdal,Vips,我正在尝试使用非方形图像制作一个金字塔形的瓷砖(宽度:32768px,高度:18433px) 我使用的libvips如下: vips dzsave my_image.tif out_folder --layout google --suffix .png 出于同样的目的,我还使用了gdal2tiles: python gdal2tiles.py -p raster -z 0-7 -w none my_image.tif 因为我的图像不是正方形,所以在创建256x256平铺时需要一些填充。但是

我正在尝试使用非方形图像制作一个金字塔形的瓷砖
(宽度:32768px,高度:18433px)

我使用的
libvips
如下:

vips dzsave my_image.tif out_folder --layout google --suffix .png
出于同样的目的,我还使用了
gdal2tiles

python gdal2tiles.py -p raster -z 0-7 -w none my_image.tif
因为我的图像不是正方形,所以在创建
256x256
平铺时需要一些填充。但是,
vip
gdal2tiles
之间的填充不同。前者在瓷砖底部添加填充物,后者在顶部添加填充物(并且是透明的)。见下图。金字塔根部的
256x256
平铺中显示的内容(即
zoom level=0
)。我已经手动添加了黄色背景和黑色轮廓

对于
vips
,是否可以对
gdal2tiles
使用类似的填充,以便磁贴的左下角与图像中的左下角重合?我正在图像上绘制点,因此原点位于左下角会有所帮助

如何在
贵宾
中使用透明背景?(不过,最好在另一个帖子中……)


您可以使用
.dz
作为文件扩展名并将参数放在文件名后的方括号中,将
dzsave
作为任何VIP操作的输出运行。例如,此命令:

vips dzsave my_image.tif out_folder --layout google --suffix .png
也可以写成:

vips copy my_image.tif out_folder.dz[layout=google,suffix=.png]
因此,您可以通过在运行dzsave之前将输入图像展开为正方形来解决问题

例如:

$ vips gravity Chicago.jpg dir.dz[layout=google,suffix=.png,skip_blanks=0] south-west 32768 32768 --extend white
32768是该图像宽度以上的最接近的二次幂。<代码> SkiPiBLUKS/<代码>选项使得DZStand不输出与空白背景瓦片相等的瓦片。 该命令使该
目录/0/0/0.png

(我添加了黑线以显示边缘)

要获得透明背景,需要添加alpha。这需要另一个命令,并且超出了vips CLI的真正设计目的

我会切换到类似Python的东西。例如,使用,您可以编写:

import sys
import pyvips

im = pyvips.Image.new_from_file(sys.argv[1], access='sequential')

im = im.addalpha()

# expand to the nearest power of two larger square ... by default, gravity will
# extend with 0 (transparent) pixels
size = 1 << int.bit_length(max(im.width, im.height))
im = im.gravity('south-west', size, size)

im.dzsave(sys.argv[2], 
          layout='google', suffix='.png', background=0, skip_blanks=0)
要使此
x/0/0/0.png


(添加绿色背景以显示透明度)

谢谢John!CLI很好,我需要在Matlab中这样做,但也需要在Python中这样做,因此我考虑使用命令行,特别是在Matlab中。我还没有尝试过Python脚本,我试图安装VIP,但我得到了一个奇怪的错误
ModuleNotFoundError:没有名为“\u cffi\u backend”的模块
,但这可能是因为我的Python。我一周前安装了
python3.7.2
,但有些东西看起来不对劲。我还可以问一下为什么瓷砖有橄榄绿的背景吗?这个集合在哪里,以及它与alpha的关系。听起来好像cffi模块未能正确安装,也许您没有安装libffi?我添加了橄榄绿背景以显示透明区域,我将添加注释。
$ ./mkpyr.py ~/pics/Chicago.jpg x