Вопрос по image, bash – ImageMagick обрезать огромное изображение

4

Я пытаюсь создать плитку из огромного изображения, скажем, 40000x40000

i нашел сценарий для imagemagick, он обрезает плитки. он отлично работает на небольших изображениях, таких как, скажем, 10000x5000

раз я получу больше, то в конечном итоге использует много памяти, и компьютер умирает.

Я добавил предельные параметры, но они не влияют на результат

У меня есть монитор, но это не помогает, так как скрипт просто тормозит и блокирует машину

Кажется, что он просто сгорбился, как 50-гигабайт диска подкачки, а затем убил машин

Я думаю, что проблема в том, что, обрезая каждую плитку, она сохраняет их в памяти. Я думаю, что мне нужно, чтобы она записывала каждую плитку на диск при ее создании, а не сохраняла их все в памяти.

пока сценарий есть

<code> #!/bin/bash
 file=$1
 function tile() {
 convert -monitor -limit memory 2GiB -limit map 2GiB -limit area 2GB $file -scale ${s}%x -crop 256x256 \
 -set filename:tile "%[fx:page.x/256]_%[fx:page.y/256]" \
 +repage +adjoin "${file%.*}_${s}_%[filename:tile].png"
 }
 s=100
 tile
 s=50
 tile
</code>

Ваш Ответ

4   ответа
7

ImageMagick forum Мне удалось заставить его работать.

Хитрость в том, чтобы заставить его работать - это.mpc формат. Так как это родной формат изображения, используемый ImageMagick, ему не нужно конвертировать исходное изображение, он просто вырезает часть, которая ему нужна. Это касается второго скрипта, который я настроил.

Пусть у тебя есть50000x50000 .tif изображение называетсяmyLargeImg.tif. Сначала преобразуйте его в собственный формат изображения, используя следующую команду:

 convert -monitor -limit area 2mb myLargeImg.tif myLargeImg.mpc

Затем запустите нижеприведенный скрипт bash, который создаст плитки. Создайте файл с именемtiler.sh в той же папке, что и изображение mpc, и поместите следующий скрипт:

 #!/bin/bash
 src=$1
 width=`identify -format %w $src`
 limit=$[$width / 256]
 echo "count = $limit * $limit = "$((limit * limit))" tiles"
 limit=$((limit-1))
 for x in `seq 0 $limit`; do
   for y in `seq 0 $limit`; do
     tile=tile-$x-$y.png
     echo -n $tile
     w=$((x * 256))
     h=$((y * 256))
     convert -debug cache -monitor $src -crop 256x256+$w+$h $tile
   done
 done

В своей консоли / терминале запустите приведенную ниже команду и посмотрите, как плитки появляются по очереди в вашей папке.

 sh ./tiler.sh myLargeImg.mpc
7

Libvips @ есть оператор, который может делать именно то, что вы хотите, очень быстро. В документации есть глава Введение в dzsave и объяснение того, как это работает.

Он также может делать это в относительно небольшом объеме памяти: я регулярно обрабатываю 200 000 x 200 000 пикселей слайд-изображений, используя менее 1 ГБ памяти.

Видеть этот ответ, но кратко:

$ time convert -crop 512x512 +repage huge.tif x/image_out_%d.tif
real    0m5.623s
user    0m2.060s
sys     0m2.148s
$ time vips dzsave huge.tif x --depth one --tile-size 512 --overlap 0 --suffix .tif
real    0m1.643s
user    0m1.668s
sys     0m1.000s
Могу ли я использовать vips (с помощью ruby-vips) на Heroku? microspino
2

Gdal_translate утилита от GDAL проект. Не пугайтесь «геопространственных» в названии проекта. GDAL - это расширенная библиотека для доступа и обработки растровых данных из различных форматов. Он предназначен для пользователей геопространственных данных, но также может использоваться для обработки обычных изображений без каких-либо проблем.

Вот простой скрипт для генерации плиток размером 256x256 пикселей из большихin.tif файл размером 40000x40000 пикселей:

#!/bin/bash
width=40000
height=40000
y=0
while [ $y -lt $height ]
do
   x=0
   while [ $x -lt $width ]
   do
      outtif=t_${y}_$x.tif
      gdal_translate -srcwin $x $y 256 256 in.tif $outtif
      let x=$x+256
   done
   let y=$y+256
done

инарные файлы @GDAL доступны для большинства Unix-подобных систем, так как Windows Загружаемое.

это может сработать, но я уже потратил немало времени на имиджмейджик, так что я получаю эту работу ... thx abe
1

ациях, как ваша, я рекомендую использовать библиотеку VIPS и связанный интерфейс Nip2

VIPS был разработан специально для работы сочен большие изображения.

http: //www.vips.ecs.soton.ac.uk/index.php название = ВИПС

OSX dmg больше не доступен (404) Я сделал быстрый Google, и кажется, что он не совместим с Lion abe
Ну, твоя проблема довольно сложная. Изображение размером с вашу, вряд ли уместится в память типичного компьютера. Однако большинство программ для работы с изображениями требует, чтобы изображение было полностью загружено для работы с ним. VIPS отличается. datenwolf
thx, но после просмотра документов для этого это кажется очень сложным решением для того, что мне нужно abe
@ abe: Как насчет компиляции из источников? MacOX поставляется с полным набором инструментов GNU. Вы также можете найти его в MacPorts или аналогичном. datenwolf

Похожие вопросы