libvips может изменять размеры изображений без использования памяти или диска - пиксели передаются через систему небольшими порциями, причем декодирование и перекодирование происходят одновременно.
Например, с изображением JPG размером 10 000 x 10 000 пикселей, я вижу:
$ vipsheader wtc.jpg
wtc.jpg: 9372x9372 uchar, 3 bands, srgb, jpegload
$ /usr/bin/time -f %M:%e vipsthumbnail wtc.jpg -s 5000x5000 -o x.jpg
98720:0.65
Это 4-ядерный 8-ниточный i7. Он использует 98 МБ памяти и занимает 0,65 с реального времени. В документах есть глава , в которой вводится vipsthumbnail .
Для сравнения, с ImageMagick 6 я вижу:
$ /usr/bin/time -f %M:%e convert wtc.jpg -resize 5000x5000 x.jpg
1263232:2.02
1,3 ГБ памяти, что занимает 2 секунды реального времени - примерно в 10 раз больше памяти и в 3 раза медленнее.
Поскольку vipsthumbnail использует так мало памяти, вы можете объединить его с параллельной GNU, не требуя сервера с большим количеством ГБ памяти. На этом i7 я могу с пользой запустить четыре за раз и получить примерно 4-кратное ускорение, так что, возможно, в 12 раз быстрее, чем ImageMagick в целом.
sharp - популярное связывание узлов для libvips , что может быть более удобным. Также есть привязки для Python, Ruby, PHP, Go, Lua и т. Д. И т. Д.
(отказ от ответственности: я один из сопровождающих libvips, поэтому я не очень нейтрален)