Вы можете запустить dzsave
как вывод любой операции vips, используя .dz
в качестве расширения файла и поместив аргументы в квадратные скобки после имени файла.Например, эта команда:
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 - это ближайшая степень двойки, превышающая ширину изображения.Опция skip_blanks
позволяет dzsave не выводить плитки равными пустым фоновым плиткам.
Эта команда делает это dir/0/0/0.png
:
(я добавил черные линии, чтобы показать края)
Чтобы получить прозрачный фон, нужно добавить альфа.Для этого потребуется другая команда, и она выходит за рамки того, для чего на самом деле разработан CLI vips.
Я бы переключился на что-то вроде Python.Например, с помощью pyvips вы можете написать:
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)
Выполнить так:
$ ./mkpyr.py ~/pics/Chicago.jpg x
Чтобы сделать это x/0/0/0.png
:
(добавлен зеленый фон для отображения прозрачности)