Навіщо мені зображення @ 1x, @ 2x та @ 3x iOS?


78

Навіщо нам потрібні ці 3 типи зображень?

Якщо в моїй програмі є кнопка із фоновим зображенням, скажімо, 50 пікселів х 50 пікселів, навіщо мені потрібні 3 версії цього зображення? Що мені заважає зробити лише одне зображення, яке набагато вище у дозволі, скажімо, 700x700, тож, якщо воно стиснеться на будь-якому iPhone, воно не потрапить під максимальну роздільну здатність, яку бажає пристрій?

Єдине, що я можу придумати, це просто займає більше місця, але для простих додатків / простої кнопки здається, що це не спричинятиме проблем. Я спробував це на кількох пристроях і не бачу різниці між ними, коли я моделюю це і роблю цей метод. Однак, оскільки я більше занурююся в програми та інше, я впевнений, що за цією технікою є суть.



3
Незважаючи на те, що це повторюване запитання, як згадано вище (і відповідна відповідь досить гарна), корисно зазначити, що сучасні версії Xcode дозволяють PDF-файли всередині xcassets. Ідея цього полягає в тому, що ви надаєте (векторні) файли PDF замість png розміром так, ніби це зображення @ 1x (це розміри документа pdf, оскільки ми говоримо про вектори), і ви позначаєте його як "Single Vector" '. Тоді Xcode видасть будь-які @NxPNG, необхідні для будь-якого кулуарного пристрою.
Алладініан,

Відповіді:


66

Якщо у вас немає точного розміру, можуть статися дві речі:

Збільшення масштабу

@3xабо @2xможе бути збільшено з, @1xале зазвичай візуальний результат розмитий, з товстими лініями і виглядає погано. UPSCALING @3xз @2xможе бути ще гірше , тому що повинні бути використані субпикселей.

Зменшення масштабу

Загалом, результати набагато кращі, ніж при збільшенні масштабу, однак це стосується не всіх зображень. Якщо 1pxна @3xзображенні є межа , після зменшення масштабу її до @1xмежі не буде видно (0,33 пікселів). Те саме стосується будь-яких дрібних предметів на зображенні. Зменшення масштабу руйнує всі деталі.

Загалом - щоб зображення виглядало ідеально, потрібно уникати як зменшення масштабу, так і збільшення масштабу. Ви завжди можете використовувати лише зображення @2xабо @3xзображення та додавати інші масштаби, лише якщо бачите проблеми із зором. Використання більш високої роздільної здатності не покращить зменшення масштабу. Високі роздільні здатності використовуються лише для того, щоб уникнути збільшення масштабу. Зменшення масштабу з високого масштабу (наприклад @100x) не @1xдасть кращих результатів, ніж зменшення масштабу з @3x.


Розумію. Для мене все це має сенс, але тоді виникає ще одне запитання ... якщо я хочу мати ці 3 типи зображень на основі пристрою ... що відбувається, коли у мене є програма, яка використовує як iPhone, так і iPad, і розмір подвійне зображення для iPad, щоб масштабуватись і виглядати красиво? тоді я повинен мати 3 зображення для iPhone та 3 окремі для iPad .... ПОТІМ, як ви розрізняєте, який із них використовувати, а не 1x, 2x або 3x?
CodeMark22

@ CodeMark22 Ви плутаєте масштаб та роздільну здатність, але так, ви можете вказати окремі ресурси для iPhone та iPad.
Султан

Тут не вистачає одного важливого моменту: нам потрібні 3 розміри зображень, тому що ми не хочемо, щоб користувач із невеликою роздільною здатністю IPhone 5 завантажував зображення IPhone 6s. Користувач IPhone 5 не помічає великої різниці в якості, але він буде завантажувати зображення iPhone 6 у форматі високої роздільної здатності без потреби.
Мухаммед

1
@Muhammad Це не обов'язково правда. Різниця у розмірі зображення 10x10 px та зображення 20x20 px не повинна бути дуже великою - мало байтів, зображення більшої роздільної здатності може бути навіть меншим, ніж зображення більш високої роздільної здатності. Зверніть увагу, що стиснення відіграє велику роль у зображеннях PNG. Додавання варіанту 1x для кожного об’єкта може бути надмірною оптимізацією.
Султан

1
Що стосується яблука, існує концепція нарізки додатків, яка гарантує, що користувач, який завантажує програму на iPhone 5, варіанти з магазину програм, отримає активи відповідно до роздільної здатності 2x. А користувач, який завантажує програму на iPhone 6, отримає 3-кратну роздільну здатність. Тож @Muhammad зайве говорити, що apple грав інтелектуально і завантажує лише активи програми відповідно до варіантів пристроїв. Надія, яка знімає деякі сумніви.
iAviator

63

Вам потрібно 3 види зображень в Image Assets, оскільки з точки зору масштабування або пікселів існує 3 типи пристроїв Apple (iPhone та iPad), тобто

Звичайний пристрій, який відповідає 1 pixel = 1 point@ 1x (старіші пристрої iPhone та iPad)

Пристрій Retina, який означає 4 pixels(2 x 2) = 1 point@ 2x (iPhone 4+)

Retina iPhone6 ​​та iPad, що 9 pixels (3 x 3) = 1 pointозначає @ 3x (iPhone6 ​​+)

Таким чином, для надання однакового зображення в 3 масштабах iOS вирішує, яке зображення показувати для яких пристроїв. Надія може допомогти вам це зрозуміти.

РЕДАГУВАТИ

введіть тут опис зображення


Це означає, що якщо зображення в 1x дорівнює 320 пікселів, тоді воно буде 1280 пікселів у @ 2x, Ви впевнені ??
Мруг,

Ні, жодне зображення не може мати лише 1 розмір у 1х, якщо зображення становить 320 пікселів Х 480 пікселів, тоді в 2 рази це буде його подвійний Я згадав 4 пікселі, оскільки для 1 точки вони отримують квадрат, отже, коли вони мають розміри довжини х ширини. вони подвоюються.
Сахеб Рой

О, ви розглянули 2 розміри і дали загальну кількість пікселів. Гаразд вас !! Я просто відредагував, щоб додати більше ясності.
Мруг

Згідно з en.wikipedia.org/wiki/Retina_Display, здається, першими пристроями Retina були iPhone 4, а не iPhone 5, як зазначено у цій відповіді.
Лірон Ягдав

@SahebRoy Це не правильно. iPhone 4 має дисплей Retina.
Габріель

7

Це тому, що якщо ви надасте одну графіку з високою роздільною здатністю, це буде марною тратою місця на пристрої користувачів. Завдяки нарізуванню додатків пристрій завантажує (з App Store) лише ті частини, які насправді підходять для пристрою (тому пристрій retina не завантажує графіку, що не є сітківкою). Ось чому Apple створила каталоги активів та правила, яких слід дотримуватися. Вони описують це на своїх сесіях.

Коротше кажучи, це зменшення використання пам’яті / диска, тому все полягає у збільшенні продуктивності та зручності користування


5

Перш за все, вам потрібно знати поведінку точок проти пікселів. На пристроях, що не мають сітківки, співвідношення точка-піксель становить 1 пункт = 1 піксель . На пристроях сітківки є два співвідношення: 1 бал = 2х2 пікселі в залежності від розміру екрана та 1 бал = 3х3 пікселі через щільність пікселів, тобто перегляд у чотири рази на не сітківці.
Ось чому вам потрібні ці 3 типи зображень, щоб вони відображалися з найвищою роздільною здатністю.


3

Доповнюючи сказане Султаном:

Оскільки ви не надали належних зображень для певного пристрою, він повинен бути зменшеним або підвищеним. Ці процеси будуть використовувати вашу пам’ять та обробку, що може призвести до зниження продуктивності, залежно від кількості зображень, які ви робите за раз, та розміру зображення.


2

Якщо ви надаєте лише одне велике зображення, ви стикаєтесь із кількома проблемами:

  1. Зменшення масштабу призводить до втрати якості (навіть якщо вона не величезна)
  2. Для зменшення масштабу зображення потрібно більше обчислювальних потужностей, ніж для відображення вже попередньо відтвореного зображення
  3. Розмір вашого двійкового файлу збільшується, і ви не можете скористатися витонченням програм, яке запроваджено з iOS 9.

Як бачите, створення лише одного зображення вплине на продуктивність та якість вашого додатка, і це непропорційно вразить тих, хто має старі пристрої. Це відбувається тому:

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

Через це користувачі можуть бути нещасними, і це погано для вас. Оскільки, з мого досвіду, нещасні користувачі в 10 разів частіше оцінюють ваш додаток, ніж щасливі користувачі. Ви цього не хочете, правда? :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.