Как без потерь обрезать изображение JPEG в nodejs? - PullRequest
2 голосов
/ 05 апреля 2019

Возьмите два.

В моем приложении nodejs мне нужно извлечь прямоугольную часть изображения JPEG.У меня есть координаты (x, y, ширина, высота), мне просто нужно обрезать.

Есть много библиотек, которые могут сделать это (sharp, jimp, lwip и т. Д.), Но все они следуют зашаблон изменения-рекомпрессии.

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

К счастью, мне не нужен урожай, чтобы быть точным.Это не проблема, если результат на несколько пикселей больше.Таким образом, я мог бы использовать извлечение JPEG без потерь 1 для правильно выровненных координат.Это позволит сэкономить циклы ЦП, память и избежать любой потенциальной потери качества.

Я знаю, что это можно сделать, потому что уже есть инструменты, которые это делают - только те, которые я смог найти, не были написаны на Javascript.Я также хотел бы избегать инструментов CLI, потому что я подозреваю, что издержки записи на диск / вызова инструмента / сбора результата были бы намного больше, чем просто выполнение танца повторного сжатия в памяти с доступными библиотеками (однако, если у вас есть аргумент для этогоподход, я также приму это в качестве ответа).

Итак - как я могу без потерь обрезать изображение JPEG (по правильно выровненным координатам) в Javascript (node.js, на стороне сервера)?Выходными данными, конечно, является другое изображение JPEG.

1 Обратите внимание, что «без потерь» в этом случае не означает означает «JPEG без потерь».Это означает «кадрирование без потерь», при котором часть файла JPEG извлекается без его распаковки / повторного сжатия.Это одна из немногих операций без потерь, которые возможны в JPEG .

...