npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@343dev/optimizt

v10.0.0

Published

CLI image optimization tool

Downloads

713

Readme

@343dev/optimizt

npm

Optimizt — это консольная утилита, помогающая подготавливать картинки для веба.

Она умеет сжимать PNG, JPEG, GIF и SVG с потерями и без, а также создавать AVIF и WebP-версии для растровых изображений.

Мотивация

Будучи фронтендерами мы должны помнить о картинках: сжимать PNG и JPEG, удалять лишние куски из SVG, создавать AVIF и WebP для современных браузеров и так далее. Однажды мы устали использовать кучу разных утилит для всего этого и создали одну единственную, которая делает всё, что нам нужно.

Использование

Установить:

npm i -g @343dev/optimizt

Оптимизировать!

optimizt path/to/picture.jpg

Флаги

  • --avif — создать AVIF-версии изображений.
  • --webp — создать WebP-версии изображений.
  • -f, --force — пересоздавать AVIF и WebP-версии, если файл уже существует.
  • -l, --lossless — оптимизировать без потерь, а не с потерями.
  • -v, --verbose — выводить дополнительную информацию в ходе работы (например, проигнорированные файлы).
  • -c, --config — использовать указанный файл с настройками, вместо настроек по умолчанию.
  • -o, --output — сохранять результат в указанную директорию.
  • -V, --version — вывести версию утилиты.
  • -h, --help — вывести справочную информацию.

Примеры использования

# оптимизация одной картинки
optimizt path/to/picture.jpg

# оптимизация нескольких изображений без потерь
optimizt --lossless path/to/picture.jpg path/to/another/picture.png

# рекурсивное создание AVIF и WebP-версий для изображений в указанной директории
optimizt --avif --webp path/to/directory

# рекурсивная оптимизация JPEG в текущей директории
find . -iname \*.jpg -exec optimizt {} +

Разница между Lossy и Lossless

Lossy (по умолчанию)

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

Lossless (запуск с флагом --lossless)

При создании AVIF и WebP-версий применяются оптимизации, которые не влияют на визуальное качество изображений.

Для оптимизации PNG, JPEG и GIF используются настройки с уклоном на получение максимального визуального качества изображений в ущерб итоговому размеру файла.

При обработке SVG-файлов настройки в Lossy и Lossless режимах — идентичны.

Конфигурация

Операции с JPEG, PNG, WebP и AVIF производятся с помощью библиотеки sharp.

SVG обрабатывается с помощью утилиты svgo, а для оптимизации GIF используется gifsicle.

[!NOTE] В режиме Lossless для оптимизации JPEG используется энкодер Guetzli, который позволяет получить высокий уровень компрессии и при этом сохранить хорошее визуальное качество изображения. Но, нужно иметь в виду, что при повторной оптимизации файла размер может уменьшаться за счёт деградации визуального качества изображения.

Настройки по умолчанию расположены в .optimiztrc.cjs, файл содержит список поддерживаемых параметров и их краткое описание.

Для отключения любого из параметров следует использовать значение false.

При запуске с флагом --config path/to/.optimiztrc.cjs для обработки изображений будут использоваться настройки из указанного конфигурационного файла.

При обычном запуске, без флага --config, будет произведён рекурсивный поиск файла .optimiztrc.cjs начиная с текущей директории и до корня файловой системы. Если файл не найден, то будут применены настройки по умолчанию.

Решение проблем

«spawn guetzli ENOENT» и т. д.

Перед установкой необходимо убедиться в том, что не используется опция ignore-scripts.

Подробнее: funbox/optimizt/issues/9.

«pkg-config: command not found», «fatal error: 'png.h' file not found» и т. д.

На некоторых ОС могут отсутствовать необходимые библиотеки и утилиты, нужно установить их самостоятельно.

Пример установки на macOS с помощью Homebrew:

brew install pkg-config libpng

Docker

Использование готового образа

# pull по названию
docker pull 343dev/optimizt

# pull по названию и версии
docker pull 343dev/optimizt:9.0.2

Самостоятельная сборка образа

# клонировать репозиторий Optimizt
git clone https://github.com/343dev/optimizt.git

# перейти в каталог с репозиторием
cd optimizt

# собрать образ
docker build --tag 343dev/optimizt .

ИЛИ:

# собрать образ без клонирования репозитория
# при этом файл .dockerignore из указанного репозитория будет проигнорирован: https://github.com/docker/cli/issues/2827
docker build --tag 343dev/optimizt https://github.com/343dev/optimizt.git

Запуск контейнера

# внутри контейнера значение WORKDIR установлено как `/src`, поэтому все пути будут разрешаться относительно неё
docker run --rm --volume $(pwd):/src 343dev/optimizt --webp ./image.png

Интеграции

Благодарности

Клёвую картинку для репозитория нарисовал Игорь Гарибальди.