В принципе, используя ImageMagick, это можно сделать одной командой.Вот пример ...
magick input.tif -background none -virtual-pixel none ^
( -clone 0--1 +repage -layers merge ) ^
-distort affine "0,0 0,%[fx:s.w==u[-1].w&&s.h==u[-1].h?0:h]" ^
-delete -1 -layers merge output.tif
Это начинается с чтения в оригинальном TIF и установки фона и настроек виртуального пикселя на "none".
Затем в скобках он клонирует всеслои TIF, повторяет их и объединяет их в одно изображение с размерами самого большого слоя.Это станет мерой для измерения.
Затем он использует «-distort affine», чтобы выдвинуть каждое изображение из области просмотра и оставить его прозрачным , если изображение не соответствует ширине и высотеэтот датчик.Таким образом, после этого искажения самое большое изображение останется неизменным, а все остальные будут прозрачными.
Завершите, удалив изображение этого датчика и объединив остальные.Все слои прозрачны , за исключением самого большого, поэтому при их объединении остается только один видимый один слой.
Команда в синтаксисе Windows использует IM7.Если вы используете ImageMagick v6, используйте «convert» вместо «magick».Чтобы это работало в * nix, измените символы продолжения строки «^» на обратную косую черту «\» и уберите круглые скобки с обратной косой чертой «\ (... \)».Могут быть и другие проблемы, которые я упустил из виду.
Очевидно, что если два или более слоев соответствуют наибольшим размерам, выходной результат будет только первым из исходного TIF.
Отредактированодобавить: этот метод будет работать, только если наибольшая ширина и наибольшая высота находятся на одном изображении.