У меня есть изображение с разрешением 18984x28591px, но я не могу открыть его с помощью Paint или Pixlr Editor, чтобы уменьшить его размер.
Как я могу конвертировать или открыть это большое изображение на моем ноутбуке?
У меня есть изображение с разрешением 18984x28591px, но я не могу открыть его с помощью Paint или Pixlr Editor, чтобы уменьшить его размер.
Как я могу конвертировать или открыть это большое изображение на моем ноутбуке?
Ответы:
Я использовал ImageMagick в Ubuntu, чтобы изменить размеры этих больших картинок.
convert -resize 10% source.jpg dest.jpg
Это заняло некоторое время, но работало с 1 Гбайт оперативной памяти, инструмент создал для себя файл подкачки размером 4,7 Гбайт.
Более подробная информация о AskUbuntu .
convert -resize 1898x2859 ...
Теоретически, большинство форматов изображений можно постепенно уменьшать, не загружая все изображение в память, однако я не знаю каких-либо инструментов, которые действительно реализуют такую функцию, кроме JPEG: это особенность в том, что вы можете не только уменьшать масштаб без загрузки полного разрешения, но также уменьшать масштаб без декодирования полного разрешения, благодаря творческому использованию DCT (JPEG кодируется в частотной области, что означает, что его не нужно декодировать с точно таким же разрешением, как у исходного изображения).
Инструмент декодирования JPEG по умолчанию (командная строка, пакет libjpeg-progs в Linux, ищите djpeg.exe для Windows) уменьшит размер огромного JPEG до того, как «обычное» приложение сможет даже завершить его загрузку:
djpeg -scale 1/8 huge_image_that_will_not_fit_in_your_ram.jpg >downscaled.ppm
Я также видел опцию downscale-while-loading в некоторых приложениях с графическим интерфейсом, но пока не могу ее вспомнить.
Сравнение использования памяти и времени обработки ImageMagick против djpeg с уменьшением масштаба большого изображения ( piping to cjpeg , поэтому результирующее изображение также jpg, для справедливого сравнения с convert )
$ display -verbose input.jpg
input.jpg JPEG 13114x11722 13114x11722+0+0 8-bit sRGB 30.75MB 6.690u 0:06.699
$ /usr/bin/time -f "time=%E mem=%MK" bash -c "convert input.jpg -scale '12.5%' output.jpg"
time=0:10.72 mem=1225844K
$ /usr/bin/time -f "time=%E mem=%MK" bash -c "djpeg -scale 1/8 input.jpg | cjpeg > output2.jpg"
time=0:00.88 mem=1412K
1,2 ГБ против 1,4 МБ и более чем в 10 раз медленнее - и это было на сравнительно небольшом изображении размером 13 x 11 КБ, которое могло полностью поместиться в ОЗУ, поэтому не происходило перестановок.
С другой стороны, использование djpeg для уменьшения масштаба также имеет свои ограничения: выбор коэффициента масштабирования ограничен, и метод повторной выборки изменить нельзя.
Вы также можете попробовать использовать Picture Resizer на Windows (мне нравится этот инструмент)
Вы просто перетаскиваете изображение на этот простой EXE. Это особенно полезно, если у вас есть много изображений для конвертации, так как вы можете сделать много одновременно.
Весь конфиг сделан через именование EXE, которое является блестящим IMO
Я никогда не пробовал это с огромным файлом, хотя.