Почему я создал конвертер изображений, который никогда не касается сервера
Why I Built an Image Converter That Never Touches a Server
Проблема: каждый «бесплатный» конвертер изображений нуждается в ваших файлах Если вам когда-либо приходилось быстро конвертировать партию фотографий в WebP или сокращать папку PNG перед отправкой их в производство, вы, вероятно, столкнулись с тем же раздражением, что и я: большинство бесплатных онлайн-конвертеров требуют, чтобы вы сначала загружали свои файлы на удаленный сервер. Это хорошо для случайного скриншота. Это не нормально, когда изображения: невыпущенные снимки продуктов под активами NDA Client вы не должны перераспределять личные фотографии, которые вы не хотите передавать стороннему серверу, о котором вы ничего не знаете, поэтому я начал смотреть на то, что браузер на самом деле может сделать сам по себе - и оказывается, больше, чем большинство людей предполагают. Что браузер уже может сделать Современные браузеры поставляют со всем необходимым для декодирования, изменения размера, повторного кодирования и...
Проблема: каждый «бесплатный» конвертер изображений нуждается в ваших файлах Если вам когда-либо приходилось быстро конвертировать партию фотографий в WebP или сокращать папку PNG перед отправкой их в производство, вы, вероятно, столкнулись с тем же раздражением, что и я: большинство бесплатных онлайн-конвертеров требуют, чтобы вы сначала загружали свои файлы на удаленный сервер. Это хорошо для случайного скриншота. Это не нормально, когда изображения: невыпущенные снимки продуктов под активами NDA Client вы не должны перераспределять личные фотографии, которые вы не хотите передавать стороннему серверу, о котором вы ничего не знаете, поэтому я начал смотреть на то, что браузер на самом деле может сделать сам по себе - и оказывается, больше, чем большинство людей предполагают. То, что браузер уже может сделать Современные браузеры, поставляется со всем необходимым для декодирования, изменения размера, повторного кодирования и сжатия изображений полностью на стороне клиента: + toBlob() / toDataURL() для повторного кодирования в JPG, PNG или WebP Файловый API для перетаскивания и пакетной загрузки Web Workers, чтобы сохранить UI-поток отзывчивым во время пакетного преобразования JSZip (или аналогичный), чтобы связать несколько преобразованных файлов в один загружаемый ZIP. Ни одно изображение не должно покидать машину пользователя. Помимо очевидной победы в конфиденциальности, конверсия в браузере имеет некоторые приятные побочные эффекты: Ни один сервер не стоит такого масштаба при использовании. Традиционный API преобразования изображений должен предоставлять вычисления для каждого запроса. Инструмент на стороне клиента масштабируется бесплатно — собственный процессор пользователя выполняет работу. Нет загрузки / выгрузки туда и обратно. Для больших партий пропуск сети часто быстрее, чем загрузка на сервер и ожидание обработанного файла обратно. Работает в автономном режиме после загрузки. Преобразователь на стороне клиента в стиле PWA продолжает работать даже с неровным соединением. компромиссы Очень большие партии (сотни изображений с высоким разрешением) могут напрячь основную нить, если вы не будете осторожны с веб-работниками. Качество и скорость кодера WebP/AVIF варьируются в зависимости от движка браузера, поэтому вы не можете гарантировать байт-идентичный выход через Chrome/Firefox/Safari. Вы теряете контроль на стороне сервера — нет простого способа обеспечить максимальный размер файла, прежде чем браузер уже загрузит изображение в память. Когда я приземлился, я превратил это в небольшой инструмент, ImagArt AI, который преобразует и сжимает изображения в JPG, PNG или WebP непосредственно в браузере с пакетной загрузкой и экспортом ZIP. Это бесплатно, и так как ничего не загружается, нет никакого компромисса конфиденциальности, чтобы думать. Если вы создаете что-то похожее, с удовольствием сравните заметки на настройках качества Web Worker или кодировщика — вы можете просмотреть комментарий ниже.