По умолчанию dzsave будет усреднять каждый 2x2 блок пикселей, что эквивалентно билинейному.
Иногда, например, с изображениями, где значения пикселей представляют метки, а не интенсивность, вам нужно неинтерполирующее сокращение. В этих случаях вы можете использовать параметр region_shrink
, чтобы выбрать median
или mode
, которые оба сохранят значения меток.
Я бы использовал:
image = pyvips.Image.new_from_file(sourceFile, access='sequential')
image.dzsave(destFile,
overlap=1,
tile_size=126,
region_shrink='mode',
suffix='.png')
Не ' не забудьте установить подсказку access
. Это даст вам значительное улучшение скорости и поведения памяти для больших изображений, которые не поддерживают произвольный доступ.
Число PNG Q задает качество квантования при выводе палитризованных изображений. Возможно, вы имеете в виду compression
? libvips по умолчанию равен 6, стандарт PNG.
Вы уверены, что хотите overlap=2
? Стандарт DeepZoom перекрывается 1. Перекрытие 1 означает, что по краям каждой плитки есть дополнительный пиксель, поэтому плитки в центре изображения будут делить два пикселя на каждом крае со своими соседями. Установка overlap=2
означает, что вы будете иметь четыре пиксельных перекрытия, до некоторой степени запутанно.
Аналогично, tile_size=128
означает, что большая часть ваших плиток будет иметь размер 132x132 пикселей. Для PNG это не имеет значения, но JPG лучше всего работает с кратными 8 на оси. Я бы установил tile_size
в (128 - 2 * перекрытие), как это делает DeepZoom по умолчанию.
git master libvips добавляет max
, min
и nearest
(всегда выбирайте верхний левый пиксель) так же. Ветвь имеет lanczos3
, но по разным причинам она никогда не объединялась.