Масштабировщик изображений: вам нужен увеличиватель или изменитель размера?
Изменитель размера интерполирует пиксели, а увеличиватель восстанавливает их. Какой из них вам нужен, с измеренными результатами 2x и 4x и реальными ограничениями браузера.
"Масштабировщик изображений" охватывает два инструмента, которые выполняют противоположные действия с файлом. Изменитель размера пересчитывает пиксели, которые у вас уже есть, так что 4000 пикселей в ширину становится 1080 пикселей в ширину, и детали усредняются в меньшее количество образцов. Увеличиватель пропускает изображение через обученную модель, которая восстанавливает края и текстуры, которые оригинал никогда не хранил. Оба изменяют число в поле размеров. Только один из них может добавить детали, и он предлагает только 2x или 4x.
Оба наших инструмента работают в вкладке браузера. Увеличиватель загружает свою модель на ваш компьютер один раз, затем каждое последующее вычисление выполняется на вашем собственном GPU. Ничего не отправляется никуда, потому что нет API-канала для отправки и никакого серверного действия в кодовой базе (это вся архитектура, описанная на нашей странице конфиденциальности). Каждый другой масштабировщик в этой категории загружает ваш файл, а затем обещает удалить его через час или два.
В чем разница между изменением размера и увеличением?
Изменение размера — это интерполяция. Наш изменитель размера передает работу браузеру, либо через createImageBitmap с `resizeQuality: "high"`, либо через канвас `drawImage` с imageSmoothingQuality, установленным на высокий уровень. В любом случае выходной пиксель является взвешенным средним значением входных пикселей вокруг него. Усреднение не может создать край, которого не было в исходных данных, поэтому увеличение за счет интерполяции дает вам больший, более мягкий экземпляр той же информации.
Увеличение — это восстановление. Наш инструмент использует Real-ESRGAN realesr-general-x4v3, генеративную модель, обученную создавать правдоподобные детали при 4x, описанную в статье 2021 года. Он обрабатывает изображение в плитках по 256 пикселей с перекрытием 16 пикселей с каждой стороны, так что плитка всегда видит контекст своих соседей перед тем, как основная область будет записана. Модель делает предположения. Эти предположения обычно верны для лиц, тканей и текста, и могут быть сильно ошибочными для тонких повторяющихся узоров.
Какой из них мне действительно нужен?
Если целевой размер меньше исходного, вам нужен изменитель размера, и тут нечего обсуждать. Если цель больше, вопрос в том, можете ли вы позволить себе ограничения ниже. Вот что на самом деле делают два инструмента в нашей сборке, взятое из кода, а не из рекламного текста.
| Изменитель размера | Увеличиватель | |
|---|---|---|
| Направление | Любой целевой размер, вверх или вниз | Только 2x или 4x |
| Метод | Интерполяция в канвасе браузера | Real-ESRGAN realesr-general-x4v3 |
| Формат выходных данных | Исходный формат сохраняется (GIF и AVIF выходят как PNG) | Всегда PNG |
| Контроль качества | PNG без потерь, все остальное перекодируется с качеством 90 | Нет, PNG не имеет регулировки качества |
| Лимит на пакет | 10 файлов, 50 MB всего | 1 файл |
| Потолок ввода | Только лимит пакета | Около 32 МП с WebGPU, около 1,1 МП без него |
| Предустановки | 15 социальных размеров плюс 25/50/75 процентов | Нет, только кнопки 2x и 4x |
Одна строка заслуживает предупреждения. Изменитель размера по умолчанию имеет установленный флажок "не увеличивать", что ограничивает любой введенный размер до оригинальных размеров. Названная социальная предустановка намеренно отменяет это ограничение, потому что ограниченный кадр истории 1080x1920 не соответствует ни одной спецификации платформы.
Насколько увеличивается файл, когда я увеличиваю?
Много, и PNG — причина. Мы запустили small.png, 400x269 и 177,1 KB, через оба настройки. При 2x он стал 800x538 и 782,8 KB. При 4x он стал 1600x1076 и 2,7 MB. Это примерно 15x входных байтов для 16x пикселей, что и выглядит как выход без потерь, когда модель только что заполнила каждую плоскую область новой микротекстурой. Увеличиватель всегда записывает PNG, так что нет ползунка качества для торговли.

Отправьте результат в компрессор перед тем, как использовать его где-либо. Наш режим PNG "без сжатия" — это уровень oxipng 3, действительно без потерь, и он уменьшил 942,4 KB alpha.png до 383,9 KB. Режим палитры (imagequant) уменьшил тот же файл до 98,3 KB, что хорошо для плоской графики и неправильно для фотографического увеличения.
Почему опция 2x выглядит мягче, чем 4x?
Потому что 2x — это не отдельная модель. realesr-general-x4v3 имеет точно один выходной масштаб, и это 4x. Когда вы выбираете 2x, мы выполняем идентичный вывод, а затем уменьшаем каждую плитку обратно до половины размера с интерполяцией канваса на высоком уровне сглаживания. Таким образом, работа GPU одинакова для обеих кнопок, а 2x — это восстановление, за которым следует повторная выборка в этом порядке. Уменьшение происходит по плиткам, что означает, что полное изображение 4x никогда не существует в памяти во время работы 2x. Если вы хотите сырое выходное значение модели, выберите 4x и уменьшите его самостоятельно в изменителе размера позже. Ширина источника, которую каждый множитель должен достичь 3840 px рассчитывается отдельно.
Почему увеличиватель не принимает мою фотографию 24 МП?
Это полностью зависит от того, запускает ли ваш браузер WebGPU. При работающем WebGPU задача 4x принимает около 32 мегапикселей ввода. Без него onnxruntime-web возвращается к однопоточной WASM, и потолок ввода падает до около 1,1 мегапикселя, что меньше, чем почти любая фотография с телефона. Это не произвольный лимит. Вычисление CPU на этой модели занимает минуты на мегапиксель, и задача 24 МП зависнет на вкладке до конца дня. Один файл за раз, всегда.
Что еще изменяет изменитель размера, кроме количества пикселей?
Больше, чем люди ожидают. Исходный PNG остается PNG и без потерь. Все остальное перекодируется, по умолчанию с качеством 90, так что изменение размера JPEG также является перекодированием, хотите вы этого или нет. Исходный GIF выходит как PNG, и если этот GIF был анимированным, вы теряете каждый кадр, кроме первого. Исходные AVIF также выходят как PNG. Три режима подгонки важны, когда соотношения сторон источника и цели не совпадают: cover центрирует обрезки, stretch искажает, а contain уменьшает канвас до подогнанной области, а не заполняет его полосами. Если вам нужна конкретная область, а не конкретный размер, обрезчик — это правильный инструмент, хотя он обрабатывает один файл за раз и перекодирует сжатые форматы с жестко заданным качеством 92.
Что же мне делать с моим файлом прямо сейчас?
Сначала проверьте длинную сторону. Если она меньше примерно 1600 пикселей и вам нужно больше, откройте увеличиватель, выполните 2x, затем пропустите PNG через компрессор в без потерь. Если больше этого, или уже на нужном разрешении, используйте изменитель размера и выберите социальную предустановку, чтобы вам не пришлось искать размеры. Если цель — лента, четыре формы, которые принимает Instagram, и потолок 1080 пикселей за ними — это список, с которым нужно работать.