Укладка растрового изображения и сжатие в python - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь составить свой растровый файл .tif У меня 12 файлов .tif, но я также хочу сжать выходной составной файл в python.

Вот мой текущий рабочий код для укладки файла, но после укладки размер файла очень большой

from osgeo import gdal
outvrt='/vsimen/Stacked.tif'
outtif='E:/Users/Compressed_files/Stacked.tif'
tifs=glob.glob('E:/Users/Compressed_files/*.tif')
outds=gdal.BuildVRT(outvrt,tifs,seperate=True)
outds=gdal.Translate(outtif,outds)

1 Ответ

2 голосов
/ 04 февраля 2020

Вы можете передать TranslateOptions объект на ваш gdalTranslate вызов, где вы можете добавить соответствующий creationOptions для сжатия.

В качестве фиктивного кода:

from osgeo import gdal

topts = gdal.TranslateOptions(creationOptions=['COMPRESS=LZW', 'PREDICTOR=2'])
outds=gdal.Translate(outtif,outds, options=topts)

Конечно, опции также могут быть строкой или массивом строк - использовать TranslateOptions.

также не обязательно. Кроме того, настройка сжатия, используемая в фиктивном коде, является лишь примером. Чтобы максимизировать прибыль, вы должны выбрать опции, которые работают с вашими данными.

Вот выдержка из документации о доступных опциях для GeoTiffs :

COMPRESS = JPEG / LZW / PACKBITS / DEFLATE / CCITTRLE / CCITTFAX3 / CCITTFAX4 / LZMA / ZSTD / LERC / LERC_DEFLATE / LERC_ZSTD / WEBP / NONE]: установите используемое сжатие. Обычно JPEG следует использовать только с байтовыми данными (8 бит на канал). Но начиная с GDAL 1.7.0 и при условии, что GDAL построен с внутренними libtiff и libjpeg, можно читать и записывать файлы TIFF с 12-битными сжатыми файлами JPEG TIFF (которые рассматриваются как полосы UInt16 с NBITS = 12). Смотрите вики-страницу «8 и 12 бит JPEG в TIFF» для более подробной информации. Сжатие CCITT должно использоваться только с данными 1 бит (NBITS = 1). Сжатия LZW, DEFLATE и ZSTD могут использоваться с опцией создания PREDICTOR. ZSTD доступен начиная с GDAL 2.3, когда используется внутренний libtiff и если GDAL собран против libzstd> = 1.0, или если он построен против внешнего libtiff с поддержкой zstd. LERC / LERC_DEFLATE / LERC_ZSTD доступны с GDAL 2.4 при использовании внутреннего libtiff (и для LERC_ZSTD, см. Вышеупомянутые условия). Ни один не используется по умолчанию.

NUM_THREADS = number_of_threads / ALL_CPUS: (из GDAL 2.1) Включить многопоточное сжатие, указав количество рабочих потоков. Стоит для медленных сжатий, таких как DEFLATE или LZMA. Будет проигнорировано для JPEG. По умолчанию используется сжатие в главном потоке.

PREDICTOR = [1/2/3]: установите предиктор для сжатия LZW, DEFLATE и ZSTD. По умолчанию 1 (без предиктора), 2 - горизонтальная разность, а 3 - прогноз с плавающей запятой.

...