Как сжать изображения в Node.js с помощью Sharp

Сжатие изображений для Интернета или приложений может значительно повысить производительность. Sharp поможет вам легко сжимать изображения в Node.js.

Как сжимать изображения в Node.js с помощью Sharp Picture 1

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

Сжатие изображений перед их загрузкой может свести к минимуму эти проблемы и улучшить взаимодействие с пользователем. Модуль Sharp делает этот процесс быстрым и простым.

Настройка среды разработки

Чтобы проиллюстрировать процесс сжатия изображений, начните с настройки службы загрузки изображений с помощью multer. Вы можете ускорить этот процесс, клонировав нужный шаблон из репозитория GitHub.

После клонирования репозитория GitHub выполните следующую команду, чтобы установить зависимости изображений службы загрузки изображений:

установка npm

Затем установите Sharp, выполнив следующую команду:

npm установить резкое

Модуль Sharp — это высокопроизводительная библиотека Node.js для обработки изображений и манипулирования ими. Вы можете использовать Sharp для эффективного изменения размера, обрезки, поворота и выполнения других операций с фотографиями. Sharp также имеет отличную поддержку сжатия изображений.

Методы сжатия изображений для разных форматов

JPG/JPEG

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

Чтобы сжать изображения JPEG с помощью Sharp, импортируйте модуль Sharp и передайте filePath или буфер изображений в качестве аргумента. Затем вызовите метод .jpeg на экземпляре Sharp. Затем передайте объект конфигурации со свойством качества, которое принимает в качестве значения число от 0 до 100. В частности, 0 возвращает самое маленькое сжатое изображение с самым низким качеством, а 100 возвращает самое сжатое изображение с лучшим качеством.

Вы можете установить значение в соответствии с вашими потребностями. Если вам нужны наилучшие результаты сжатия изображений, сохраняйте значение в диапазоне 50–80, чтобы достичь баланса между размером и качеством.

Завершите работу, сохранив сжатое изображение в файловой системе с помощью метода .toFile. Передайте путь к файлу, который вы хотите записать, в качестве аргумента.

Например:

await Sharp(req.file.path).jpeg({quality: 60 }) .toFile(`./images/compressed-${req.file.filename}`) .then(() => { console.log( `${req.file.filename} успешно сжат`); });

Значение качества по умолчанию — 80.

PNG

PNG — это формат файлов изображений, предназначенный для сжатия без потерь и поддержки прозрачного фона.

Сжатие изображения PNG с помощью Sharp аналогично сжатию изображения JPEG с помощью Sharp. Однако есть два изменения, которые необходимо внести, если фотография находится в формате PNG.

  1. Sharp обрабатывает изображения PNG, используя метод .png вместо .jpeg.
  2. Метод .png использует compressLevel — число от 0 до 9, которое заменяет качество в объекте конфигурации. 0 дает максимально быстрое и максимальное значение сжатия, а 9 — самое медленное и наименьшее значение сжатия.

Например:

await Sharp(req.file.path).png({ compressLevel: 5, }) .toFile(`./images/compressed-${req.file.filename}`) .then(() => { console.log (`${req.file.filename} успешно сжат`); });

Значение по умолчанию для compressLevel — 6.

Другие форматы

Sharp поддерживает сжатие различных форматов изображений, включая WebP, TIFF, AVIF, HEIF.

Сжимайте изображения с помощью Sharp

Если вы клонировали репозиторий GitHub, откройте файл app.js и добавьте следующий импорт.

const Sharp = require(“Sharp”); const {exec} = require(“child_process”);

Excel — это функция, предоставляемая модулем child_process, которая позволяет развертывать команды оболочки или внешний процесс из приложения Node.js.

Вы можете использовать эту функцию для запуска команды для сравнения размера файла до и после сжатия.

Затем замените обработчик POST /single на блок кода ниже:

app.post(“/upload-and-compress”, upload.single(“image”), async (req, res) => { try { if (!req.file) { return res.status(404).send (“Пожалуйста, загрузите допустимое изображение”); } const compressedFileName = req.file.filename.split(“.”)(0); const compressedImageFilePath = `./images/${compressedFileName}-compressed.png`; ожидайте резкий (req.file.path) .jpeg({quality: 50 }) .toFile(compressedImageFilePath) .then(() => { let sizeBeforeCompression, sizeAfterCompression; const sizeBeforeCompressionCommand = `du -h ${req.file.path}` ; const sizeAfterCompressionCommand = `du -h ${compressedImageFilePath}`; exec(sizeBeforeCompressionCommand, (err, stdout, stderr) => { sizeBeforeCompression = stdout.split(“t”)(0); exec(sizeAfterCompressionCommand, (err, stdout) , stderr) => { sizeAfterCompression = stdout.split(“t”)(0); res.send({ message: “Изображение успешно загружено и сжато”, sizeBeforeCompression, sizeAfterCompression, }); }); }); }) ; } catch (ошибка) { console.log(error); } });

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

Команда du — это утилита Unix, сокращение от «использование диска». Он оценивает файловое пространство и анализирует использование диска в папке или группе папок. Когда вы запускаете команду du с флагом -h, она показывает размер файла, который использует каждый подкаталог, вместе с содержимым в удобочитаемой форме.

Запустите службу загрузки, выполнив следующую команду:

узел app.js

Затем протестируйте приложение, отправив изображение JPG по маршруту localhost:/upload-and-compress с помощью клиента приложения Postman или любого другого инструмента тестирования API.

Вы увидите ответ, подобный этому:

{ “message”: “Изображение успешно загружено и сжато”, “sizeBeforeCompression”: “13M”, “sizeAfterCompression”: “3.1M” }

Выше описано, как сжимать изображения в Node.js с помощью Sharp. Надеюсь, статья окажется для вас полезной.

В приведенной выше статье вы познакомились с «Как сжимать изображения в Node.js с помощью Sharp». СоветыНадейтесь, что эта статья вам поможет! Если эта статья кажется вам интересной и полезной, не забудьте поделиться ею. Спасибо!

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *