Images & photos · Соціальний образ
Як Browser Image Resizing Works: Полотно, малювати
· Як працює
Опубліковано ToolAcre · Редакція журналу
зображення полотно веб-переглядач

Переглядач може декодувати фото, внести його в полотно на новий розмір і закодувати результат, всі без сервера. Цей пост випливає з того, що трубопровід, пояснює, де якість виграє або втратила, і показує, чому обмеження розміру є пам'яттю пристрою.
Не завантажуйте, не завантажуйте сервер, як і раніше негабаритно — бетонне питання, де робота відбувається при усадці сторінки 20-мегапіксель фото
Фото може стати фотографом 1080 від 1350 Портрет без відвідування сервера обробки зображень. Соціальний ресивайзер зображень отримує файл від браузера, перевіряє його MIME тип і розмір, і дзвінки створюютьImageBitmap. Що декодовано бітма залишається джерелом для кожного вибраного виходу, тому один локальний об'єкт може подавати кілька різних формованих полотен.
Перегляд не є остаточним експортом, прихованим за мережевим запитом. Це менша канва, що дає однаковий обрамлення стану: співвідношення цілі, масштаб, зсув, режим придатності та фон. Експорт пізніше повторює, що рендерують на заданих розмірах, кодує Blob і руки Blob для контролю завантаження на сторінці.
Декодування є локальним, але це інструмент також застосовує локальний 40 MB обмеження введення
План говорить пам'ять пристрою є єдиною практичною межею, але шлях введення відправлення має явний 40 MB обмеження файлів. JPEG, PNG і WebP приймаються, інші види відхиляються до декодування. Після цього воріт створітьImageBitmap просить браузер, щоб перетворювати стиснені байти файлів в ширину, висоту і декодовані пікселів, які миються полотном.
Декодовані пікселі можуть зайняти набагато більше пам'яті, ніж стиснений файл, і кожен вихідний полотно вимагає власного виділення. Рендер, таким чином, викликає спільну опіку перед створенням полотна. Це другий, пристрій орієнтований на обмеження, не дозвіл на обіцянку, що кожен файл нижче 40 MB буде відповідати кожному запитуваному виводу на кожній машині.
DrawImage масштабує позиціонована повна бітмапа під час виходу полотна кліпи переповнення
ToolAcre не розрахувати вихідний прямокутник культури і пройти восьмих аргументів для вилучення Ускладнює масштаб від вихідних і цільових розмірів, позиціонує всю масштабовану бітма, і накреслює її на полотні, краї якого кліпують будь-який перелив. У режимі чохла, що клипінг є культурою; в режимі містяться всі бітма залишаються видимими.
Відрізняється, що культура і розмір не є синонімами. Сприяє зміні розмірів, при яких з'являється бітмапа. Підтяжка видаляє, що лежить зовні скінченної вихідної рами. Один виклик маляра може брати участь в обох ефектах тут, але культура виробляється геометрією кадру і кліпуванням, а не перезаписуючи вихідний файл першим.
Стійкість під витяжкою — розгладжування параметрів, що означає «висока якість» запитує браузер, і чому результати дещо відрізняються між браузерами
Перед кресленням рендерера дозволяє зображенняSmoothingEnabled і встановлює зображенняSmoothingQuality до високої. Ті, хто контролює полотно, не запит на ім'я Lanczos, bicubic або інших ядер. Впровадження не може обіцяти ідентичних зразків через двигуни API визначає якісний натяг, а не точний коефіцієнт браузера.
Корисне порівняння зберігає джерело, розміри виводу та фіксують браузери, потім перевіряє діагональні краї, тонкі лінії та повторні текстури. Якщо інший веб-переглядач дещо відрізняється, що не означає зміни коефіцієнта цілі. Саме таким же геометричним запитом, що пропускаються через різне виконання полотна, що саме тому стаття не дозволяє винайденню продуктивність або якісний відсоток.
Закодувати вихід — перевернути полотно назад в закодований файл зображення і запропонувати його для завантаження
Експортне полотно стає Блобом через OffscreenCanvas.convertToBlob коли існує метод, або HTMLCanvasElement.toBlob інше. Вибір користувача JPEG, PNG або WebP. Якісне значення подається в енкодер, хоча PNG не використовується контроль якості втрат JPEG і WebP до. В результаті вимірюється кількість байтів, не оцінено.
Для декількох обраних цілей інструмент будує кожен Blob в послідовності, відображає його реальні розміри і вимірюється розмір, і може пакетувати вже зашифровані файли в ZIP. ZIP зберігання не покращує стиснення зображень тут; примітки вмісту, що ці формати вже стискаються. Індивідуальні завантаження та архів як виявляються з локально створених байтів.
Ця реалізація виконує експортну роботу на головній нитки, не в Web Worker
Робоча книга говорить про важку роботу, як правило, працює в Web Worker, але це додаток імпортує урожай і надає функції безпосередньо в main.js і петлі через цілі там. Немає працівника, створеного в перевіреному шляху. Сторінка все ще може залишатися корисною для звичайних робочих місць, але чуйність повинна дотримуватися, а не приписуватися до архітектури, яка не представляється.
Мережева ізоляції підтримується двома видами доказів. Основні тести встановлюють мережевий охоронець і каркас, кожен заданий без спроби, при цьому запис продукту переробляється локальним. Перевірка мережевої панелі може додавати докази розгортання. Варто відрізнити завантаження зображень від звичайних активів сторінок або розголошувати аналітику замість того, щоб подати заявку на всю сторінку.
Що це не криється — GPU-прискорені резизування бібліотек та розподільчих пристроїв на сервері
Цей маршрут навмисно побудований на примітивах браузера, а не GPU бібліотечний або дистанційний медіапровід. Це не піддається вибірковому переробці ядра, еталонних альтернативних алгоритмів або обіцянок прискореної обробки партії. Одне джерело зображення виробляє кілька культур; багато непов'язаних вихідних файлів належать до різних робочих процесів.
Ті відчуження зберігають обіцянку. Код доводить валідацію файлів, декодування бітма, арифметичне обрамлення, малювання полотна, кодування Блоба і збірка завантаження. Не доведено, як сервер ферми буде змінювати однакові параметри або які GPU шлях браузера може вибрати внутрішньо. Затискачі зупиняються на захищених Web API.
Ведуться: Ваш браузер вже має резинатор, побудований в — Сонцезахисний ресивер для вас, обрізання та масштабування на співвідношення платформи без завантаження файлу
У браузері вже є необхідні операції, але корисні результати залежать від правильної геометрії навколо них. Соціальний образ Resizer вибирає максимальну кількість для кришки, мінімальний розмір для зберігання, переміщення затискачів, перегляд безпечних запасних інструкцій окремо та експорту за певними розмірами. Що оркестрція виходить на низькорівневе креслення API в повторюваний соціальний процес.
Тестування трубопроводу з оригінальним зображенням, а не раніше знебоченої копії. Виберіть поточний інструмент для заміщення або користувацького співвідношення, перемістіть тему, експорт один раз і перевірте завантажені розміри. Свідчення є локальним файлом, який ви отримуєте і шлях до коду, який зробив його, не претензія, що кожен браузер використовує ідентичний прихований ресемплер.