Задать вопрос

Как загрузить изображение, разбитое на несколько частей?

Есть карта submarine-cable-map-2014.telegeography.com разбитая на на множество .png кусочков. Если ли возможность скачать все куски автоматизированно и потом их склеить? Отмечу, что прошлогоднею карту скачать получилось habrahabr.ru/post/167913 , но каким образом это было сделано, не совсем понял. Цитирую один из комментариев: - "wget+convert из ImageMagick поработали для вас" - я по образованию строитель, не судите строго.

ps: заранее спасибо!
  • Вопрос задан
  • 4874 просмотра
Подписаться 5 Оценить Комментировать
Решения вопроса 3
Gorily
@Gorily
Подождите около часа. Скачивание уже сделал, осталось доделать склеивание.
Вот результат: https://www.dropbox.com/s/6964a8wm18bvsqv/submarin...

Кратко о том, как это делать под Windows:
1. Скачиваем все тайлы простым PowerShell скриптом:
Clear-Host
$client = new-object System.Net.WebClient
ForEach ($number in 0..63 ) { 
ForEach ($number1 in 0..63 ) { 
	$row = "{0:D2}" -f $number1
	$column = "{0:D2}" -f $number
	$client.DownloadFile("http://b.tiles.telegeography.com/maps/submarine-cable-map-2014/6/$number/$number1.png","map/tile_$column-$row.png")
}}

Тут можно добавить проверку на существование (если вдруг нужно будет докачать), красиво назвать переменные и сделать асинхронную загрузку. Но не нужно :)

2. Склеиваем ImageMagick:
montage.exe "путь_к_каталогу\*.png" -tile 64x64 -geometry +0+0 "путь_к_файлу_результата\result.png"
Ответ написан
Anonym
@Anonym
Программирую немного )
2012 (15Mb)
2013 (91Mb)
2014 (28Mb)

Делал в 3 этапа, для надежности:

1. Качаем тайлы
#!/bin/bash
for i in {0..63}
do
        for j in {0..63}
        do
                wget -x http://a.tiles.telegeography.com/maps/submarine-cable-map-2014/6/$i/$j.png
        done
done

2. Склеиваем вертикальные полосы
#!/bin/bash
for i in {0..63}
do
        COMMAND=""
        for j in {0..63}
        do
                COMMAND="$COMMAND a.tiles.telegeography.com/maps/submarine-cable-map-2014/6/$i/$j.png"
                montage $COMMAND -geometry +0+0 -tile 1x64 tiles/$i.png
        done
done

3. Собираем карту
#!/bin/bash
COMMAND=""
for i in {0..63}
do
        COMMAND="$COMMAND tiles/$i.png"
done
montage $COMMAND -geometry +0+0 -tile 64x1 submarine-cable-map-2014.png
Ответ написан
На bash решается элементарно:
#!/bin/bash
ARR="0 1 2 3 4 5 6 7"
SW=256
SH=256
P=""

mkdir -p m
for x in $ARR; do  
	for y in $ARR; do  
		echo "$x $y";
		wget -O "m/$x-$y.png" "http://a.tiles.telegeography.com/maps/submarine-cable-map-2014/3/$x/$y.png"
		P="$P -page +$[$x*$SW]+$[$y*$SH] m/$x-$y.png"
	done;
done;
convert $P -mosaic map.png
rm -r m

q3MjY22iY7LnkEj_c8wfC58c4dXob-Z-vja1iLCT
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Ну если в кратце там уже написано wget+convert. Нужен скрипт который скачает все кусочки целиком и склеит. Но задача в целом хоть и не сложная, но и не тривиальная (в одну строчку не решается).

Возможно вам стоит поискать кого-то кто на энтузиазме или за небольшое вознаграждение сделает эту работу.

Либо попробуйте связаться с автором прошлогодней карты.
Ответ написан
Anonym
@Anonym
Программирую немного )
Когда-то очень давно, я руками подобную карту сохранял по кусочкам и в фотошопе склеивал их. Убил пару дней.
Ответ написан
@radioxoma
SASPlanet. Просмотр, склейка, хранение по слоям. Если там ещё нет ZMP для вашей карты, можно дописать самостоятельно или обратится на их форум.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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