40000x40000 などの巨大な画像からタイルを作成しようとしています。
彼がタイルを切り取るimagemagickのスクリプトをオンラインで見つけました。10000x5000などの小さな画像では問題なく動作します
大きくなると、メモリを使い切ってしまい、コンピューターが死んでしまいます。
制限オプションを追加しましたが、効果がないようです
そこにモニターがありますが、スクリプトが速度を落としてマシンをロックアップするだけなので役に立ちません
50ギガのスワップディスクのように貪欲になり、マシンを強制終了するようです
問題は、各タイルをトリミングするときにそれらをメモリに保持することだと思います。私が必要だと思うのは、すべてのタイルをメモリに保存するのではなく、作成時に各タイルをディスクに書き込むことです。
これがこれまでのスクリプトです
#!/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