标签: 

正在查看 16 个帖子:1-16 (共 16 个帖子)
  • 作者
    帖子
  • @45925 回复

    tigershuai
    游客

    一些高清图需要下载小图块后拼接成一张完整的大图,请问先生有什么好的办法能批量下载这些小图块呢?比如如下这张图:

    www.nara-wu.ac.jp/aic/g...youzu.html

    @45926 回复

    tigershuai
    游客

    或是一次性批量得到小图块的地址列表,望先生赐教。

    @45933 回复

    未曾
    管理员

    @tigershuai #45925

    你有Linux的运行环境吗?你熟悉其bash脚本运行吗?我只会写这个脚本

    @45941 回复

    tigershuai
    游客

    @未曾 #45933

    我有统信系统的电脑,但不太懂bush

    @45951 回复

    未曾
    管理员

    @tigershuai #45941

    那就没办法了~只能给你成品了

    当麻练供养图.17730x21235像素.诞生寺所藏
    下载链接: nx.shuge.org/wl/?i...34Rx7CHfHe

     奈良国立博物館

    @45954 回复

    未曾
    管理员

    贴一下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目录下

    @46124 回复

    tigershuai
    游客

    未曾先生,在Linux上运行fzp.sh时出现以下问题

    感觉是代码有语法错误,不知是怎么回事,还望先生能继续解惑。

    @46125 回复

    未曾
    管理员

    @tigershuai #46124

    可能是编码的问题(我在Windows下保存的这个脚本),你安装一下dos2unix

    然后 dos2unix fzp.sh后再执行~

    【建议】或者通过vim粘贴代码进去创建文件

    上面的fzp.sh文件我已经重新做了一遍dos2unix。可以重新下载试试

    @46140 回复

    tigershuai
    游客

    @未曾 #46125

    运行后仍然显示错误

    @46141 回复

    未曾
    管理员

    @tigershuai #46140

    那你还是下成品图吧,😅

    @46283 回复

    tigershuai
    游客

    经过几天都努力,终于解决了运行错误的问题。下面还有一个问题,就是一下子下载几千张小图块,很难保证不出错误图,网络稍微不稳定,就有可能下载到坏图,不知先生是怎么解决这个问题的,还忘赐教。

    @46286 回复

    未曾
    管理员

    @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 秒。
    @46331 回复

    tigershuai
    游客

    在运行中出行以下错误(第一张图),最后拼图不成功(第二张图),请问先生是什么原因呢?另外,小图块下载完成后就自动删除了,能不能设置成不自动删除,而由人工手动删除呢。

    @46339 回复

    未曾
    管理员

    @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

     

     

    @46357 回复

    tigershuai
    游客

    @未曾 #46339

    我运行的就是您上面提供的fzp.sh那个文件,没做修改。我怀疑是不是imagemagick安装有问题?

    @46373 回复

    未曾
    管理员

    @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"/>
    ……
正在查看 16 个帖子:1-16 (共 16 个帖子)
正在查看 16 个帖子:1-16 (共 16 个帖子)

上传图片

拖拽或点击选择图片

回复至:未曾先生,请问有方法批量下载这些图的小图块吗?
您的信息:



初次发帖前:建议先阅读