Сжать файл изображения очень большого разрешения с помощью Imagemagick

У меня есть отсканированные изображения с разрешением 20400x28056. Я хочу, чтобы они были сжаты с помощью imagemagick. Я старался convert ToBeCompressed.jpeg -quality 70 output.jpeg но эта команда делает мой ноутбук разбился. Я думаю, что это не в состоянии справиться с таким большим разрешением. Любые предложения, пожалуйста.

1 ответ

Решение

Несколько вещей, которые нужно проверить... ваше изображение соответствует примерно 1,6 ГБ необработанных данных, поэтому вы можете обнаружить, что вам нужно использовать 64-битную среду, а не 32-битную. Если вы работаете в Windows, вам может потребоваться работать на файловой системе NTFS, а не на FAT, поскольку файловые системы FAT, хотя они могут иметь размер до 130 ГБ, не могут поддерживать отдельные файлы размером более 2 ГБ или, возможно, 4 ГБ, если вам повезет.

Наконец, не могли бы вы изменить размер изображения, а не уменьшить его качество, если вы изменяете его на лету во время чтения, вы можете добиться большего успеха, поскольку оно менее ресурсоемко. Итак, скажем, вы решили, что можете принять изображение на половину длины с каждой стороны (1/4 от исходной области)

convert input.jpg[50%x50%] -quality 70 output.jpg

В зависимости от того, что вы на самом деле хотите сделать с изображением впоследствии, вы можете использовать ImageMagick's stream Утилита для разделения изображения на куски. Он читает изображение по очереди за раз, поэтому он использует очень мало памяти. Итак, чтобы получить две половины изображения в необработанном формате, вы можете сделать

stream  -extract 20400x14028+0+0     ToBeCompressed.jpg tophalf.rgb
stream  -extract 20400x14028+0+14028 ToBeCompressed.jpg bottomhalf.rgb

Затем, если вы хотите преобразовать эти необработанные файлы RGB в JPG, вы можете сделать

convert -depth 8 -size 20400x14028 tophalf.rgb tophalf.jpg

Другой путь, которым вы могли бы следовать, может быть vips, который описан здесь.

Итак, если ваше изображение называется BigBoy.jpg Вы можете сделать это, чтобы установить качество на 60, например:

vips jpegsave BigBoy.jpg BB60.jpg --Q=60

что приводит к этому в моей системе

ls -l Bi* BB60.jpg
-rw-r--r--  1 mark  staff  270283175 19 Mar 14:17 BB60.jpg
-rw-r--r--  1 mark  staff  997198223 19 Mar 14:07 BigBoy.jpg
Другие вопросы по тегам