Как использовать imagemagick «конвертировать» для создания файлов пирамид Google Earth - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть большое изображение, которое я использую imagemagick для преобразования в плитки для использования в KML Google Планета Земля, как описано здесь инструкции по построению пирамиды изображений Идея состоит в том, чтобы разделить изображения на 4 части,затем 16, затем 64 и т. д.

Чтобы упростить задачу, я сделал холст изображения 4096x4096, чтобы при его делении получались файлы одинакового размера.Основная команда очень проста.Например:

convert large.png -crop 512x512 tile.png

Проблема в том, что команда convert создает имена файлов последовательно, в то время как google необходим формат столбца строк,Например, если было выведено четыре файла, имена файлов должны быть:

tiles00.png
tiles01.png
tiles10.png
tiles11.png

Я перебираю сценарии принудительного переименования максимум для 64 файлов, но прежде чем делать случай с 256 файлами, я хотел бы знать, еслиСуществует более простой способ создания имен файлов.Я использую Linux.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вы пытаетесь сделать свой собственный, чтобы узнать о процессе?Если нет, то существующие инструменты, такие как dzsave , могут очень быстро построить полные пирамиды за одну команду.Например:

$ vipsheader wtc.jpg 
wtc.jpg: 10000x10000 uchar, 3 bands, srgb, jpegload
$ /usr/bin/time -f %M:%e vips dzsave wtc.jpg x --layout google
211224:1.52
$ ls -R x | wc
   2404    2316   15186

Итак, мы создаем пирамиду в стиле Google из 2400 плиток в каталоге x из изображения JPG с разрешением 10 000 x 10 000 пикселей.Это занимает около 1,5 с и 210 Мб оперативной памяти.

В руководстве есть глава, в которой вводится dzsave:

http://libvips.github.io/libvips/API/current/Making-image-pyramids.md.html

0 голосов
/ 26 сентября 2018

Вот один из способов использования Imagemagick 6 для циклов:

lena.png

enter image description here

Изображение lena.png256x256.Я выбираю плитки размером 128х128.Таким образом, для четырех выходных изображений будет всего 2 строки и 2 столбца.

infile="lena.png"
tx=128
ty=128
ncols=`convert -ping "$infile" -format "%[fx:floor(w/$tx)]" info:`
nrows=`convert -ping "$infile" -format "%[fx:floor(h/$ty)]" info:`
for ((j=0; j<nrows; j++)); do
offy=$((j*ty))
for ((i=0; i<ncols; i++)); do
offx=$((i*tx))
convert lena.png -crop ${tx}x${ty}+${offx}+${offy} +repage lena_tile${j}${i}.png
done
done


lena_tile00

enter image description here

lena_tile01

enter image description here

lena_tile10

enter image description here

lena_tile11

enter image description here

Альтернативный, более компактный способ - использовать команду -set filename с вычислениями fx для именования файлов в цепочке изображений.

infile="lena.png"
tx=128
ty=128
ncols=`convert -ping "$infile" -format "%[fx:floor(w/$tx)]" info:`
nrows=`convert -ping "$infile" -format "%[fx:floor(h/$ty)]" info:`
convert "$infile" -crop ${tx}x${ty} -set filename:row_col "%[fx:floor(t/$nrows)]%[fx:mod(t,$ncols)]" "lena_tile%[filename:row_col].png"

См .: https://imagemagick.org/Usage/basics/#set https://imagemagick.org/script/fx.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...