f Распечатка карт на принтере А4
Гонки и путешествия под парусом
Новости Регаты Рулевые Форум Видео Фотоконкурс Справочник

Автор Тема: Распечатка карт на принтере А4  (Прочитано 21622 раз)

0 Пользователей и 1 Гость смотрят эту тему.

Esquire

  • Сообщений: 485
  • Уважуха: +80/-74
Re: Распечатка карт на принтере А4
« Ответ #10 : 23 Августа, 2011, 14:54:48 »
Уважаемые форумчане! Проблема такая.
Есть карта (ну, например) http://turmaps.net/modules/mapcentr/Podmoskovqe/Redkino,Novozavidovskij/map.jpg
Подскажите как можно печатать подобные файлы на обычном принтере (кусками, конечно), чтобы карта
получилась нужного масштаба?
Можно мне? Я относительно недавно разбирался с этой темой и могу поделиться.
В целом мой путь почти такой же как предложил ГШ, но с некоторыми подробностями.
Для получения на бумаге А4 карты нужного масштаба из произвольной картинки взятой в интернете нужно сделать два шага. А именно, привести картинку к нужному разрешению (а на http://poehali.org/ например разрешение не всегда совпадает как на приведенном Pes примере) и порезать ее на куски размера А4.
Первый шаг я не знаю как автоматизировать, если не известно разрешение которое было при сканировании, и делаю руками. Я пользуюсь редактором http://www.gimp.org/ (есть и для виндуса) но и в других вероятно все тоже самое. В Гимпе есть "Измеритель" которым я измеряю размер клеточки на карте и путем изменения DPI делаю его равным 20мм. Теперь остается вопрос как порезать. Для этого я использую http://www.imagemagick.org который работает из консоли (тоже есть для виндуса) но все расчеты полезны и для других редакторов.

Для начала необходимые нам константы:
А4 = ширина 210мм (8,27D) , высота  297мм (11,69D) И в дюйме 25,4 мм

Теперь узнаем нужные нам параметры картинки (на примере map.jpg из ссылки Pes-а)
$ identify -format "%[width]x%[height]x%[xresolution]" map.jpg
4000x5251x300

это в точках. Точки переводятся в миллиметры так: DPI это точек на дюйм. То есть в 25,4 мм в нашем примере содержат 300 точек. То есть в 1 мм 300/25,4 = 11,8 точек.
Отсюда следует что количество точек для А4 расчитывается так:
ширина = 8.27 (дюймов нирина А4) * 300 (DPI) - поле (я делаю 5мм то есть 11,8 * 5) = 2422
высота = 11.69 * 300 - 59 = 3448
Все. Зная количество точек и умея их складывать мы сможем порезать картинку. Например так:
$ convert map.jpg +repage -crop 2422x3448+0+0 map-1.jpg;
$ convert map.jpg +repage -crop 2422x3448+2422+0 map-2.jpg;
$ convert map.jpg +repage -crop 2422x3448+0+3448 map-3.jpg;
$ convert map.jpg +repage -crop 2422x3448+2422+3448 map-4.jpg;

Теперь всего то осталось оформить это в виде скрипта и пользоваться легко и просто.
Я приведу тут свой скрипт который я писал на баше для линукса, но может быть кто то переделает его для виндуса?

#!/bin/bash

FNAME=${1};

# Если не задан параметр имя файла то выдать хелп
if [ -z $FNAME ]; then
  echo "Usage $0 filename [orient]";
  echo "orient - V || G";
  exit 0;
fi

# Если задана ориентация страницы или по умолчанию
if [ -z ${2} ]; then
  ORIENT="V"; # Вертикально
#  ORIENT="G"; # Горизонтально
else
  ORIENT=${2};
fi

# Получаем параметры картинки
TMP=`identify -format "%[width]x%[height]x%[xresolution]" ${FNAME}`;
PWIDTH=`echo ${TMP} | cut -d'x' -f1`;
PHEIGHT=`echo ${TMP} | cut -d'x' -f2`;
DPI=`echo ${TMP} | cut -d'x' -f3`;

# Рамка 5 мм
FRAME=`echo "scale=1; (${DPI}/25.4)*5/1" | bc`

# Считаем размеры под А4
MINSIDE=`echo "scale=0; (8.27*${DPI}-${FRAME})/1" | bc`;
MAXSIDE=`echo "scale=0; (11.69*${DPI}-${FRAME})/1" | bc`;

# В зависимости от ориентации присваеваем размер
if [ "${ORIENT}" == "G" ]; then
    A4WIDTH=${MAXSIDE}; A4HEIGHT=${MINSIDE};
else
    A4WIDTH=${MINSIDE}; A4HEIGHT=${MAXSIDE};
fi

RSIZE="${A4WIDTH}x${A4HEIGHT}";
ILIMIT=$((${PHEIGHT} / ${A4HEIGHT})); # Сколько строк
JLIMIT=$((${PWIDTH} / ${A4WIDTH})); # Сколько столбцов

# Создаем директорию для результата
DIR=./${FNAME}-${ORIENT}-split;
mkdir -p ${DIR}/th;

# Создаем индексный файл с превью
echo -e "<HTML>\n<HEAD>\n<TITLE>${1}</TITLE>\n<HEAD>\n<BODY>\n\n" > ${DIR}/index.html;
echo -e "<TABLE border=\"1\" cellspacing=\"0\" cellpadding=\"3\" bordercolor=red>\n" >> ${DIR}/index.html;

# Цикл для разрезки
for ((I=0; I <= ILIMIT; I++)); do
    echo -e "<TR>" >> ${DIR}/index.html;
    for ((J=0; J <= JLIMIT; J++)); do
# Команда разрезания
        COMMAND="convert ${FNAME} +repage -crop ${RSIZE}+$((0 + ${A4WIDTH} * ${J}))+$((0 + ${A4HEIGHT} * ${I})) ${DIR}/r${I}.c${J}-${FNAME}";
        echo "${COMMAND};";
        ${COMMAND};
# Команда создания превью
        convert ${DIR}/r${I}.c${J}-${FNAME} -resize 15% -quality 100 ${DIR}/th/l_r${I}.c${J}-${FNAME};
        echo -e "<TD><a href=\"r${I}.c${J}-${FNAME}\"><img src=\"th/l_r${I}.c${J}-${FNAME}\" border=\"0\">[/url]</TD>" >> ${DIR}/index.html;
    done
    echo -e "</TR>\n" >> ${DIR}/index.html;
    echo "---";
done

echo -e "</TABLE>" >> ${DIR}/index.html;
echo -e "</BODY>\n</HTML>\n" >> ${DIR}/index.html;

exit;

Пользуюсь этим скриптом постоянно. Чего и вам желаю :)

Serge37

  • Сообщений: 362
  • Уважуха: +28/-4
  • Название: Кузьмич
  • Тип: Альбатрос
  • Номер: М517
Re: Распечатка карт на принтере А4
« Ответ #11 : 23 Августа, 2011, 15:41:36 »
Как-то все очень сложно.
Гораздо проще все решается с помощью CorelDraw.
Содается проект с размерами примерно соответсвующие размеру будующей карты (указывается в милиметрах). Туда импоритуется(ются) картинка(ки)  карты. Маштабируются все очень просто. Рисуется квадрат размерами, например, 10х10 мм или 100х100 мм. Затем изменяется маштаб картинки (указывается в % от исходного зачения с + или - ), до тех пор пока какой либо объект на карте имеющий реальный размер 10х10 или 100х100 мм визуально не совпадет с нашим нарисованным квадратом.
Если извесны какими должны быть размеры карты, то задаем маштаб не в процентах, а в милиметрах.
После этого выводим на печать, задав в настройках печати в разделе Layout галочку Print tiled pages и размер бордюра Tile Overlap в милиметрах.
Все, останется только склеить.

Вот еще, что хотелось бы отметить. Пользоваться полноразмерной картой (например полтора на метр) во время перехода очень не удобно. Я поступаю проще. Я использую заламинированные листы А4, с одной стороны которых уменьшенная полная карта, а с другой стороны карта в нормальном маштабе, так чтобы можно было рассмотреть на ней все необходимые детали.
Кстати я не стремлюсь точно выдерживать масштаб. Так например на финских картах Ладоги 1936 года  нанесена километровая сетка, что позволяет хорошо оритентироваться в расстояниях. Если такой сетки нет, то ее можно нанести.
« Последнее редактирование: 23 Августа, 2011, 15:58:12 от Serge37 »

Esquire

  • Сообщений: 485
  • Уважуха: +80/-74
Re: Распечатка карт на принтере А4
« Ответ #12 : 23 Августа, 2011, 16:04:12 »
Как-то все очень сложно.
Гораздо проще все решается с помощью CorelDraw.
Ну это кому как ;) Мне, как человеку проводяющему почти все время в консоли, imagemagick конечно же проще. Но умея посчитать пиксели резать можно уже в чем угодно. Вот бы еще придумать как восстанавливать реальный DPI и отказаться от гимпа ....

Вот еще, что хотелось бы отметить. Пользоваться полноразмерной картой (например полтора на метр) во время перехода очень не удобно. Я поступаю проще. Я использую заламинированные листы А4, с одной стороны которых уменьшенная полная карта, а с другой стороны карта в нормальном маштабе, так чтобы можно было рассмотреть на ней все необходимые детали.
Полноразмерную еще и клеить умаешься и ламинировать не ясно как. Так что тему про ламинированные А4 я поддерживаю.

DSSh

  • Гость
Re: Распечатка карт на принтере А4
« Ответ #13 : 23 Августа, 2011, 16:51:54 »
Подсмотрел у Олеси Ильной решение, которое очень понравилось: печатать карты на банере! Если когда соберусь этим заняться, непременно так и сделаю.

ГШ

  • -
  • Сообщений: 4248
  • Уважуха: +233/-165
  • Название: SALACIA
  • Тип: Sunwind 20
  • Номер: М 150, -
Re: Распечатка карт на принтере А4
« Ответ #14 : 23 Августа, 2011, 17:41:27 »
Опция при поставке катамарана: поплавки (а особенно палатка если есть) с напечатанными картами. Типа ситчик в горошек.  Клиент выбирает, весь глобус или чего поближе но покрупней.
Григорий Шмерлинг

ksr

  • Сообщений: 82
  • Уважуха: +5/-3
Re: Распечатка карт на принтере А4
« Ответ #15 : 23 Августа, 2011, 18:12:16 »
Полноразмерную еще и клеить умаешься и ламинировать не ясно как. Так что тему про ламинированные А4 я поддерживаю.
По размеру удобнее пользоваться A3. Карты ГУНИО размером 690х940мм сканированные не хуже 6000х8000 можно распечатать в фотоателье на фотобумаге 30х40см (макросъемка участка такой карты шириной 15мм внизу слева - карта уже в ламинате , видны царапины накопившиеся за 3 года) или на цветном лазерном принтере( на фото вверху слева без ламината). С хорошим зрением на фотобумаге все различимо, на лазернике не очень - минимум надо печатать A2. 
Справа скан, с которого печаталось на лазернике, скан для вывода на фотобумагу был немного хуже.  И удобная линза, если надо рассмотреть все детально.
« Последнее редактирование: 23 Августа, 2011, 18:22:20 от ksr »

mahor1990

  • Сообщений: 1
  • Уважуха: +0/-0
  • Название: Ярослав
Re: Распечатка карт на принтере А4
« Ответ #16 : 30 Июля, 2012, 00:17:12 »
Можно использовать программу для печати постеров и плакатов RonyaSoft Poster Printer, потом аккуратно склеить и заламиноровать...   ;)

Esquire

  • Сообщений: 485
  • Уважуха: +80/-74
Re: Распечатка карт на принтере А4
« Ответ #17 : 30 Июля, 2012, 03:03:38 »
Можно использовать программу для печати постеров и плакатов RonyaSoft Poster Printer, потом аккуратно склеить и заламиноровать...   ;)
Можно, но только если есть
Цитировать
Environment
Windows 2000, Windows XP (32 & 64), Windows 2003 (32 & 64), Windows Vista (32 & 64), Windows 7 (32 & 64), Windows 2008 (32 & 64).
внизу по ссылке... у меня, например, нет.
Кроме того программа платная ...
imagemagick же есть почти под все оси и бесплатен. Но конечно же кому как и что нравится ... Можно и так.