remover.bg
← Блог
4 хв читання

Чому фото лягає набік після завантаження

Фото рівне в телефоні, а у формі завантаження — набік? Що робить прапорець орієнтації Exif, як відрізнити повернуті пікселі від тега й як це владнати.

  • exif orientation
  • photo rotation
  • product photography
  • image upload
  • jpeg
  • webp
  • marketplace listings
  • file metadata
Чому фото лягає набік після завантаження

Ви знімаєте товар на телефон, повертаєте апарат, натискаєте кнопку спуску затвора. На екрані все стоїть рівно. А у формі завантаження на маркетплейсі фото приїжджає покладеним набік — той самий файл, розвернутий на чверть оберту.

Це не телефон зламався. Зображення цілком може лежати набік усередині файлу — і лежить там від самої зйомки. Телефон однаково показує його вам правильно. Форма завантаження — ні.

Ваш файл перебуває в одному з двох станів, і щоб їх розрізнити, достатньо однієї перевірки.

Камера зберігає зображення таким, яким його побачила матриця

Матриця — це нерухомий прямокутник, прикручений до телефона; вона не повертається разом із вами. Знімаєте вертикальне фото — вона однаково записує горизонтальний кадр, а ваш об’єкт лежить усередині нього набік.

Крупний план камери зі знятим об’єктивом: відкрите металеве байонетне кріплення радше широке, ніж високе

Багато камер не переписують мільйони пікселів, а замість цього вписують у метадані невелике число зі значенням «поверни це на чверть оберту, перш ніж показувати». Інші повертають пікселі під час збереження й позначають файл як уже рівний — саме тому два телефони поводяться з одним і тим самим кадром по-різному. У JPEG це число — тег Exif 274, Orientation, і він здатен описувати не лише повороти, а й дзеркальні кадри.

Одні програми зважають на прапорець, інші — ні

Сучасні браузери його читають. CSS-властивість image-orientation має початкове значення from-image; MDN формулює це прямо: «Інформація EXIF, що міститься в зображенні, використовується для належного повороту зображення». У браузерах це працює з квітня 2020 року.

Усе, що не є браузером, може й далі ігнорувати тег. Вебстандарти зійшлися на тому, щоб його поважати, але безліч серверних декодерів, генераторів мініатюр і графічних бібліотек написані ще до того збігу й до тега взагалі не заглядають — і ніщо їх до цього не зобов’язує.

Тож питання ніколи не в тому, «чи лежить моє фото набік», а в тому, «чи прочитала прапорець та програма, що його показує». Ваша галерея читає. Генератор мініатюр на маркетплейсі — можливо, ні.

Поворот у галереї може лише переписати прапорець

Натискаєте кнопку повороту — і результат залежить від застосунку. Статися можуть дві дуже різні речі.

Рука тримає смартфон надворі, на екрані — застосунок галереї, повний фотографій

  • Застосунок змінює значення орієнтації й не чіпає самі пікселі. Миттєво, без втрат і непомітно для всього, що ігнорує прапорець: у файлі ваше фото досі лежить набік.
  • Застосунок перекодовує: декодує пікселі, повертає їх і записує новий файл зі скинутим прапорцем. Поворот впаяно всередину, і він виживає будь-де. Для PNG чи WebP без втрат це не коштує нічого; для JPEG це зазвичай коштує одного покоління перекодування — заплатити раз варто, повторювати не варто.

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

Гірший випадок — інструмент, який повертає пікселі, але копіює старі метадані без змін: прапорець і далі каже «поверни», пікселі вже повернуті, і програми, що поважають прапорець, повертають фото двічі.

Як зрозуміти, у якому стані ваш файл

Придивляючись уважніше, цього не з’ясувати — лише перевіривши щось, що не є попереднім переглядом.

Руки тримають смартфон із фотографіями перед відкритим ноутбуком, на екрані якого в браузері відкрита така сама галерея

  • Порівняйте форму з числами. Якщо фото, що виглядає вертикальним, у властивостях файлу значиться ширшим, ніж вищим, — пікселі горизонтальні, а роботу виконує прапорець. Деякі переглядачі виправляють і ці числа, тож розбіжність доводить більше, ніж збіг.
  • Прочитайте сам прапорець. Браузери, настільні переглядачі й мініатюри у файловому менеджері нині майже всі поважають тег, тож їхня одностайність не доводить нічого. Працюйте з копією, ніколи з оригіналом, і відкрийте її в Exif-переглядачі, щоб прочитати Orientation напряму. Будь-яке значення, крім 1, яке часто показують як «Normal», означає, що роботу виконує прапорець, а пікселі стоять не рівно.

Розберіться з орієнтацією, перш ніж файлу торкнеться щось інше

remover.bg приймає PNG, JPEG і WebP до 25 MB та повертає новий файл уже без фону. Це інструмент для видалення фону, а не фоторедактор: поворот належить фоторедактору вашого телефона або дизайнерському інструменту — до завантаження.

Порядок тут важливий, бо ви створюєте новий файл. І PNG, і контейнер WebP мають куди покласти Exif — специфікація WebP від Google дозволяє метадані «у чанках 'EXIF' або 'XMP '», — але чи запише їх туди редактор, у якому ви повертали фото, вирішує він, а не ви. Впаяйте поворот у пікселі — і губити буде вже нічого. Наші нотатки про підтримку WebP із завантаженням і експортом без конвертації охоплюють цей формат.

Робочий порядок дій:

  1. Поверніть фото в редакторі й експортуйте копію, замість того щоб натискати поворот у галереї.
  2. Перевірте значення Orientation на цій експортованій копії.
  3. Завантажте її на видалення фону.
  4. Покладіть вирізку на суцільний колір чи власну фотографію, додавши тінь, якщо об’єкт має стояти на поверхні.

Командам, які женуть обсяги через HTTP API для видалення фону, варто спершу нормалізувати орієнтацію просто в конвеєрі: один покладений набік оригінал стає однією покладеною набік вирізкою — і так тисячу разів. Орієнтація лишається поза правилами щодо фону в нашому гайді про вимоги Amazon до фото товарів, але лістинг, покладений набік, виглядає недбало, хай що ще ви зробили правильно.

Звичка, яку варто виробити

Довіряйте файлу, а не попередньому перегляду. Повертайте через експорт і прочитайте Orientation один раз на копії — тоді фото стоятиме рівно і в браузері, і в генераторі мініатюр, і в черзі друку.

Читайте також