标签: 可下载
- 作者帖子
tigershuai游客一些高清图需要下载小图块后拼接成一张完整的大图,请问先生有什么好的办法能批量下载这些小图块呢?比如如下这张图:
tigershuai游客或是一次性批量得到小图块的地址列表,望先生赐教。
未曾管理员@tigershuai #45925
你有Linux的运行环境吗?你熟悉其bash脚本运行吗?我只会写这个脚本
tigershuai游客@未曾 #45933
我有统信系统的电脑,但不太懂bush
未曾管理员
未曾管理员贴一下bash脚本,供参考
需要安装imagemagick,需要填入图片的root.xml文件地址
#!/bin/bash # Script to download tiles # Last update: 20220520 dzi="https://www.nara-wu.ac.jp/aic/gdb/mahoroba/y29/taimanerikuyouzu/resources/tanjoji_taimanerikuyouzu/root.xml" xml=
curl -s ''$dzi''
wi=(echo $xml | sed 's/.*width=\"\([0-9]*\).*//g'
) hi=(echo $xml | sed 's/.*height=\"\([0-9]*\).*//g'
) tsize=(echo $xml | sed 's/.*tilewidth=\"\([0-9]*\).*//g'
) url=echo ${dzi/root.xml/}
"0/" cols=$((wi/tsize+1)) rows=$((hi/tsize+1)) for ((i = 0; i < $rows; i++)) do string='' for ((j = 0; j < $cols; j++)) do if [ $i -lt $((rows-1)) ] ; then nh=$tsize else nh=$((hi%tsize)) fi if [ $j -lt $((cols-1)) ] ; then nw=$tsize else nw=$((wi%tsize)) fi num1=echo $((j*tsize))|awk '{printf("%05d\n",$0)}'
num2=echo $((i*tsize))|awk '{printf("%05d\n",$0)}'
num3=echo $nw |awk '{printf("%05d\n",$0)}'
num4=echo $nh |awk '{printf("%05d\n",$0)}'
image=$num1$num2$num3$num4'.jpg' img=$j'_'$i'.jpg' file=$url$image echo $file string=$string' '$img wget --no-check-certificate --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" -c -t 40 -O $img $file -q done montage $string -tile $cols''x1 -mode concatenate row$i.jpg done string='' for ((i = 0; i<$rows; i++)) do string=$string' 'row$i.jpg done if [ ! -d "downloads" ]; then mkdir downloads fi convert -limit memory 0 -strip +profile "*" -quality 80 $string -append -density 300 -units PixelsPerInch downloads/full.jpg string=*.jpg rm $string下载(fzp.sh)
代码测试此图运行无问题
如果不会使用,我也没办法~自行解决基础问题
下载文件在downloads目录下
tigershuai游客未曾先生,在Linux上运行fzp.sh时出现以下问题
感觉是代码有语法错误,不知是怎么回事,还望先生能继续解惑。
未曾管理员@tigershuai #46124
可能是编码的问题(我在Windows下保存的这个脚本),你安装一下dos2unix
然后 dos2unix fzp.sh后再执行~
【建议】或者通过vim粘贴代码进去创建文件
上面的fzp.sh文件我已经重新做了一遍dos2unix。可以重新下载试试
tigershuai游客@未曾 #46125
运行后仍然显示错误
未曾管理员@tigershuai #46140
那你还是下成品图吧,😅
tigershuai游客经过几天都努力,终于解决了运行错误的问题。下面还有一个问题,就是一下子下载几千张小图块,很难保证不出错误图,网络稍微不稳定,就有可能下载到坏图,不知先生是怎么解决这个问题的,还忘赐教。
未曾管理员@tigershuai #46283
我的网络还没遇到这个问题。
如果网络确实有问题,可以调整wget的参数
-T, --timeout=SECONDS 将所有超时设为 SECONDS 秒。 --dns-timeout=SECS 设置 DNS 查寻超时为 SECS 秒。 --connect-timeout=SECS 设置连接超时为 SECS 秒。 --read-timeout=SECS 设置读取超时为 SECS 秒。
-t, --tries=NUMBER 设置重试次数为 NUMBER (0 代表无限制)。 --retry-connrefused 即使拒绝连接也是重试。
-w, --wait=SECONDS 等待间隔为 SECONDS 秒。 --waitretry=SECONDS 在获取文件的重试期间等待 1..SECONDS 秒。 --random-wait 获取多个文件时,每次随机等待间隔 0.5*WAIT...1.5*WAIT 秒。
tigershuai游客在运行中出行以下错误(第一张图),最后拼图不成功(第二张图),请问先生是什么原因呢?另外,小图块下载完成后就自动删除了,能不能设置成不自动删除,而由人工手动删除呢。
未曾管理员@tigershuai #46331
提示宽度或高度超出了限制
可能要修改policy.xml文件参数
legacy.imagemagick.org/disco...hp?t=34044不删除碎片的话
#!/bin/bash # Script to download tiles # Last update: 20220520 dzi="https://www.nara-wu.ac.jp/aic/gdb/mahoroba/y29/taimanerikuyouzu/resources/tanjoji_taimanerikuyouzu/root.xml" xml=
curl -s ''$dzi''
wi=(echo $xml | sed 's/.*width=\"\([0-9]*\).*//g'
) hi=(echo $xml | sed 's/.*height=\"\([0-9]*\).*//g'
) tsize=(echo $xml | sed 's/.*tilewidth=\"\([0-9]*\).*//g'
) url=echo ${dzi/root.xml/}
"0/" cols=$((wi/tsize+1)) rows=$((hi/tsize+1)) for ((i = 0; i < $rows; i++)) do string='' for ((j = 0; j < $cols; j++)) do if [ $i -lt $((rows-1)) ] ; then nh=$tsize else nh=$((hi%tsize)) fi if [ $j -lt $((cols-1)) ] ; then nw=$tsize else nw=$((wi%tsize)) fi num1=echo $((j*tsize))|awk '{printf("%05d\n",$0)}'
num2=echo $((i*tsize))|awk '{printf("%05d\n",$0)}'
num3=echo $nw |awk '{printf("%05d\n",$0)}'
num4=echo $nh |awk '{printf("%05d\n",$0)}'
image=$num1$num2$num3$num4'.jpg' img=$j'_'$i'.jpg' file=$url$image echo $file string=$string' '$img wget --no-check-certificate --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" -c -t 40 -O $img $file -q done montage $string -tile $cols''x1 -mode concatenate row$i.jpg done string='' for ((i = 0; i<$rows; i++)) do string=$string' 'row$i.jpg done if [ ! -d "downloads" ]; then mkdir downloads fi convert -limit memory 0 -strip +profile "*" -quality 80 $string -append -density 300 -units PixelsPerInch downloads/full.jpg string=row*.jpg rm $string
tigershuai游客@未曾 #46339
我运行的就是您上面提供的fzp.sh那个文件,没做修改。我怀疑是不是imagemagick安装有问题?
未曾管理员@tigershuai #46357
前面已经说了,应该是系统分配给imagemagick 的资源不够处理大的图片。建议修改policy.xml文件参数
policy.xml一般位于/etc/ImageMagick-*/目录下
修改(参考值或根据自己电脑调整)如下
…… <policy domain="resource" name="memory" value="16GiB"/> <policy domain="resource" name="map" value="16GiB"/> <policy domain="resource" name="width" value="128MP"/> <policy domain="resource" name="height" value="128MP"/> <!-- <policy domain="resource" name="list-length" value="128"/> --> <policy domain="resource" name="area" value="16GiB"/> <policy domain="resource" name="disk" value="30GiB"/> ……
- 作者帖子