slazav / mapsoft2

Programs for map handling, based on mapsoft2-libs
https://slazav.github.io/mapsoft2/
GNU General Public License v3.0
6 stars 1 forks source link

Прошу добавить выходной формат изображений без сжатия #60

Closed ioctl-user closed 2 years ago

ioctl-user commented 2 years ago

Сейчас все выходный форматы файлов изображений подразумевают сжатие с потерями или без.

При отрисовке плиток один и тот же файл читается и пишется каждый раз, когда обрабатывается один лист карты, а их несколько десятков. В итоге получаются большие накладные расходы на пересжатие png.

Можно добавить какой-то условный bmp с альфа-каналом, или убрать сжатие в tiff?

ioctl-user commented 2 years ago

Уточнение. В write_geoimg.cpp , write_geoimg() есть такая строка:

if (opts.get<bool>("skip_empty") && res == GObj::FILL_NONE) return;

Однако, она работает только при отрисовке плиток самых первых листов, так как перед этим стоит загрузка изображения из существующего файла и, соответственно, невыполнению условия.

В итоге заведомо ненужные плитки считываются и потом перезаписываются.

slazav commented 2 years ago

Смысл параметра skip_empty такой: Объект GObj, который что-то рисует на картинке, может вернуть GObj::FILL_NONE, если он ничего не нарисовал. В этом случае файл не сохраняется.

Действительно, если есть параметр --add и существует файл, то он будет зря прочитан (но не записан). Надо подумать, как это можно оптимизировать. Можно, наверное, рисовать на отдельную картинку, а потом, если что-то было нарисовано, то подгрузить старую и перенести все на нее. Но как-то это криво. Еще, наверное, можно в интерфейс GObj добавить отдельную функцию проверки "будет ли что-нибудь нарисовано на данной картинке".

Форматы без сжатия, конечно, имеет смысл добавить. Попробую это сделать.

slazav commented 2 years ago

Формат pnm или pam, кстати, подойдет?

slazav commented 2 years ago

Добавил параметр --tiff_compression для указания алгоритма сжатия при записи TIFF-файлов:

При использовании сжания jpeg при записи tiff-файлов используется параметр --jpeg_quality, так же, как и при записи jpeg-файлов. Интересно, что jpeg-сжатие в tiff сохраняет прозрачность.

https://github.com/slazav/mapsoft2-libs/commit/33a0845811c3d697f6887eaa5838d6e32a0cf659

slazav commented 2 years ago

А про оптимизацию --skip_epmty, наверное, лучше сделать отдельный баг. Хотя красивого решения я пока не вижу.