Imaginile fac parte integrantă din fiecare aplicație. Redimensionarea imaginilor a fost o problemă recurentă pentru toți dezvoltatorii. Odată cu creșterea rezoluției camerei și a fragmentării dispozitivelor, este crucial ca algoritmul folosit pentru redimensionare să ofere rezultate precise.

calitate

În acest articol, voi analiza în mod empiric tehnicile de redimensionare a imaginilor și cea mai bună soluție posibilă pentru redimensionarea imaginilor, concentrându-se pe calitatea imaginii.

Aici am să trec peste patru metode de redimensionare a imaginilor. Toate s-au concentrat pe generarea celei mai bune imagini.

Voi compara toate imaginile redimensionate cu o imagine de referință. Permite generarea imaginii de referință din Photoshop (Bicubic). Vom compara imaginile grafic și apoi în mod emperal cu Eroare medie.

UIKit

Redimensionarea UIKit este cea mai simplă dintre redimensionare și produce rezultate bune.

CoreGraphics

Folosind CoreGraphics calitatea imaginii este identică cu imaginea UIKit. Cel puțin nu am putut percepe nicio diferență și imagediff nu a dat nici o diferență. Singura diferență constă în performanță.

Să vedem diferența dintre imaginea grafică de bază și originalul. Dacă vă uitați atent la gif, este posibil să observați că imaginea este neclară. Este posibil să trebuiască să clarificăm puțin această imagine sau să folosim o altă metodă de redimensionare pentru a genera rezultate mai bune.

CoreImage

CoreImage produce rezultate destul de interesante. Aceasta fiind cea mai lentă dintre toate metodele, am presupus că produc imagini de calitate mult mai bună, dar pare să genereze multe artefacte de redimensionare.

Iată o comparație a rezultatului de redimensionare CoreImage cu imaginea originală.

Puteți observa că luminile par mai strălucitoare decât ar trebui să fie. Acest artefact apare în toate imaginile redimensionate cu CoreImage. De asemenea, imaginea pare puțin mai clară în general.

vImagine

Acest mic cadru slab documentat prezintă un pumn foarte puternic. Rezultatele sunt uimitoare. Aceasta produce cele mai bune rezultate cu o imagine perfect clară și echilibrată. Mai puțină estompare în comparație cu CG. Mai ascuțit decât CG. Nu la fel de nefiresc de ascuțit ca CI.

În comparația de mai sus. Dacă vă uitați la diferențele dintre imaginea de referință (cel mai la stânga), veți observa că redimensionarea vImage produce cele mai bune rezultate cu cea mai mică diferență (roșu). Nu este doar această imagine, ci majoritatea imaginilor redimensionate cu acest cod generează rezultate similare.

Performanța API-ului este excelentă. Acesta poate fi utilizat cu ușurință pentru toate operațiunile de redimensionare a imaginii.

Notă: Am evaluat valorile culorilor, comparându-le cu imaginea originală și vImage pare a fi cel mai apropiat de imaginea de dimensiune originală decât alte imagini redimensionate, inclusiv versiuni redimensionate Photoshop.

Dezavantajul vImage

Redimensionarea vImage folosește filtrul de eșantionare Lanczos5. Iată un citat din documentația oficială a mărului

Metoda de eșantionare Lanczos produce de obicei rezultate mai bune decât abordările mai simple, cum ar fi interpolare liniară. Cu toate acestea, metoda Lanczos poate produce efecte de sunet în apropierea unor regiuni de semnale de înaltă frecvență (cum ar fi linia de artă).

Comparaţie

Să comparăm toți algoritmii și să vedem Eroarea medie între imagini.

Eroarea medie pare să fie destul de mică pentru vImage.