Существует ли инструмент командной строки, который изменит тип сжатия, используемый в изображении TIFF, не отбрасывая неизвестные теги? Imagemagick 7.1.1-36 отбрасывает теги GeoTIFF, когда я делаю следующее, несмотря на то, что этот пост подразумевает обратное.
% magick USGS_13_n35w119_20240207.tif -compress Zip USGS_13_n35w119_20240207zip.tif
Вот пример изображения. Я пытаюсь сделать это на MacOS.
Опубликуйте здесь свой tiff-файл, чтобы я мог протестировать его или сообщить об этом на веб-сайте Imagemagick GIF. Какая у вас ОС/платформа?
Кстати, я согласен, что это законный вопрос. Я думаю, что вам нужно понять большую часть слов, чтобы это понять.
Ссылка на ваше изображение дает «Доступ запрещен».
Вы можете просто перетащить изображение со своего рабочего стола, оно будет подхвачено хостом изображений SE.
@MadPhysicist Довольно сложно рассматривать «Есть ли инструмент командной строки…» как нечто иное, чем «Вопрос с просьбой порекомендовать или найти инструмент» — то есть не по теме.
@ДанМашек. Не обязательно. ОП запрашивает очень конкретную операцию, явно провел какое-то исследование, что-то попробовал и имеет конфликт с текущим уровнем знаний. Если бы я писал для этого конвейер bash, я бы думал об этом так же, как о вызове библиотеки Python.
ТЛ,ДР
Сожмите с помощью ImageMagick и скопируйте теги пересылки из исходного файла с помощью exiftool
:
# Compress with ImageMagick
magick INPUT.TIF -compress LZW result.tif
# Copy forward tags from original
exiftool -TagsFromFile INPUT.TIF result.tif
Или вы можете сделать однострочник:
magick INPUT.TIF -compress lzw TIFF:- | exiftool -TagsFromFile INPUT.TIF - > result.tif
Оригинальный ответ
Я скачал файл с тегами GeoTIFF отсюда . Затем я сжал его с помощью LZW с помощью ImageMagick:
magick SP27GTIF.TIF -compress LZW new.tif
magick: Unknown field with tag 33550 (0x830e) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/945.
magick: Unknown field with tag 33922 (0x8482) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/945.
magick: Unknown field with tag 34735 (0x87af) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/945.
magick: Unknown field with tag 34737 (0x87b1) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/945.
Затем я проверил файл new.tif
и обнаружил, что теги отсутствуют. Я вернул теги обратно, скопировав вперед из исходного файла с помощью exiftoool
:
exiftool -TagsFromFile SP27GTIF.TIF new.tif
И, при повторной проверке, исходные теги GeoTIFF (из SP27GTIF.TIF
) присутствовали в изображении, сжатом LZW new.tif
.
identify -verbose new.tif | grep -Ei "tag|LZW"
Format: TIFF (Tagged Image File Format)
identify: Unknown field with tag 33550 (0x830e) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/945.
identify: Unknown field with tag 33922 (0x8482) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/945.
identify: Unknown field with tag 34735 (0x87af) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/945.
identify: Unknown field with tag 34737 (0x87b1) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/945.
Compression: LZW
Проверка с помощью tiffinfo
дает, среди прочего:
Tag 33550: 32.800000,32.800000,0.000000
Tag 33922: 0.000000,0.000000,0.000000,681480.000000,1913050.000000,0.000000
Tag 34735: 1,0,2,5,1024,0,1,1,1025,0,1,1,1026,34737,24,0,2049,34737,23,24,3072,0,1,26771
Tag 34737: State Plane NAD27, Feet|NAD27 in Feet default"|
Predictor: horizontal differencing 2 (0x2)
Это здорово, спасибо. Хотя я пытаюсь перейти от lzw к zip/выкачиванию.
Коллега предложил gdal_translate
для изображений GeoTIFF. После некоторых экспериментов я остановился на следующем:
% gdal_translate -co compress=deflate -co tiled=yes -co blockxsize=512 -co blockysize=512 -co num_threads=8
По умолчанию gdal_translate
изменит мозаичное изображение на изображение, состоящее из полос, поэтому вам нужно указать это явно. Я думаю, что ответ Марка лучше, поскольку он должен сохранять все теги, а не только те, о которых знает GDAL.
У вас должна быть возможность изменить сжатие с помощью ImageMagick, а затем использовать
exiftool -TagsFromFile
для копирования тегов. См. exiftool.org/forum/index.php?topic=10189.0