Tutustu Instagramin pakkauslaatuun

Selvitä, johtuuko Instagramin huono pakkauslaatu Androidille alustan rajoituksista vai Instagramin kehittäjien tahallisesta toiminnasta.

Androidin Instagram-sovelluksesta on tullut yksi maailman suosituimmista sosiaalisen median alustoista. Yli kanssa 300 miljoonaa kuukausittaista käyttäjää kaikilla alustoilla, ja yli 100 miljoonaa yksittäistä latausta Google Play Storessa, voit odottaa Facebookin tilannekuvien jakamissovelluksen olevan laadukas sekä suunnittelun että toiminnallisuuden osalta. Valitettavasti suuri osa käyttäjäkannastaan ​​- eli Android-instagrammareita - Instagram ei pysty tekemään hyvää työtä ainoassa asiassa, joka sen on tarkoitus tehdä - kauniiden kuvien jakamisessa.

Vaikka iOS-käyttäjät voivat jakaa luomuksiaan ja hetkiään tarkasti, Android-käyttäjät ovat raportoineet kuviensa äärimmäisestä laadun heikkenemisestä jo vuosia. Yksi vanhimmista langoista, jotka valittavat tällaisesta päänsärystä löytyi täältä XDA: sta syyskuussa 2012, ja lanka on jatkunut tähän asti tarjoten lukijoille epätavallisia tapoja yrittää kiertää Instagramin naurettavaa valokuvien tuhoamista. Luulisi, että yli kahden vuoden valitusten, sekä ohjelmistojen että laitteistojen teknisten parannusten sekä talouden ja markkinoiden kasvun jälkeen Instagram olisi ratkaissut nämä ongelmat. Onko se jotain, mistä he ovat syyllisiä? Vai onko ongelman perimmäinen syy syvemmällä kuin miltä näyttää?

Suora katse

Tässä itse ottamani kuva. Alkuperäinen laukaus painaa 4,34 Mt ja häntä ammuttiin 9,6 MP. Jotta ei otettaisi huomioon "Instacrop"-alasnäytteenottoa, joka ymmärrettävästi tuhoaisi niin korkearesoluutioisen tiedoston yksityiskohdat skaalaamalla sen myöhemmin Instagramin alkuperäiseen tiedostoon. 640 x 640 pikselin ulostulo, rajasin sen Instagram-latausten 1:1-kuvasuhteen JPG: ksi nähdäkseni jälkikäsittelyalgoritmin ja sen pakkaamisen suorat vaikutukset tähän. tiedosto.

Nappasin yksinkertaisesti neliön JPG-rajauksen ja julkaisin sen Instagramissani ilman lisättyjä suodattimia, tehosteita tai säätämistä arvoja. Odotat kuvan näyttävän melko samanlaiselta kuin alun perin nähtiin, mutta tulos oli epäuskottava. Reunojen ja värigradientien ympärillä olevat pakkausartefaktit ovat hämmästyttävän havaittavissa jopa kouluttamattomalle silmälle. Vaikka alkuperäinen 1:1 rajaustiedoston koko oli 1,6 Mt, uusi kokoa muutettu ja pakattu kuva on 125 kt. Tämä tarkoittaa, että pakkaus pienensi alkuperäisen tiedostokokoa lähes kertoimella 13 - mikä ei välttämättä ole huonoa joissain yhteyksissä.

Mielenkiintoista on, että Instagram tarjoaa "korkealaatuisen kuvankäsittelyn", joka on oletuksena pois päältä, mutta kun se on päällä, tulokset eivät näytä todella paranevan, ja pakattu tiedosto istuu 129 kt. Tässä tarjoan sinulle saman rajauksen ja voit nähdä, että nykyinen pakkaus on edelleen melko voimakas ja kuvan tarkkuudessa on edelleen karkeaa ja pikselöityä häviötä.

Puristus

Tietokonealgoritmit tarjoavat erilaisia ​​tapoja pienentää kuvan kokoa eri tekniikoilla, jotka optimoivat kuvan

tiedot, jotka on myöhemmin tulkittava ja näytettävä sopiva kuva sopivalla tavalla. Monet kuvien tiedostotyypit liittyvät tiiviisti näihin tukemiinsa pakkaustekniikoihin tai eivät tue - ja siksi näemme yleensä parempaa laatua joissakin kuvissa kuin muut. PNG (Portable Network Graphics) -tiedostoja käytetään yleensä median jakamiseen ilman tarkkuuden ja kuvanlaadun heikkenemistä. Tiedostokoko on suurempi kuin häviöllisesti pakatut kuvat. GIF on hyvin vanha kuvamuoto, joka myös pakataan häviöttömästi.

Monet ohjelmoijat oppivat tekniikoita tiedostokoon pienentämiseksi tai optimoimiseksi akateemisissa harrastuksissaan riippumatta siitä, millä alalla he kehittyvät. Nimet mm deflaatio (käytetään PNG) tai Lempel-Ziv-Welch algoritmi (käytetään yleensä GIF) kulkevat nykyään monien tietojenkäsittelytieteen luokkahuoneiden läpi, soivat monien ohjelmoijien korvissa, ja yhä tehokkaampia pakkaustekniikoita kehitetään ja dokumentoidaan, voit odottaa miljardöörialustan sisällyttävän kohtuullisen tehokkaita algoritmeja, jotka tuottavat erittäin hienon kuvan, samalla kun tekniset seikat eivät rasita palvelimia ja käyttäjien toimintaa. laitteisto.

Mutta tämä ei yksinkertaisesti pidä paikkaansa. Kuvat, joita miljoonat Instagram-käyttäjät ja minä otamme ja lataamme päivittäin, ovat suoraan ristiriidassa näiden insinööritaidon kertomuksen kanssa. teknologiamaailman suurvallat, joiden oletetaan pumppaavan suuri osa tuloistaan ​​investoimalla takaisin ohjelmistoonsa tarjotakseen parhaan käyttäjän kokea. Mutta tässä on vielä yksi kysymys vastaamatta: Miksi Android eikä iOS?

VSCO ja Android-muisti

Vaikka suositut Internet-foorumit, kuten Reddit, yrittivät selvittää päivittäisen raivonsa syytä, epäoikeudenmukaisuudella ei näyttänyt olevan muuta loogista perustaa. kuin mahdollinen selitys Android-laitteistolle, joka on luonnostaan ​​huonompi laskentatehoosastolla, tai se, että kun otetaan huomioon laaja valikoima alempien Android-laitteiden, nämä toimenpiteet oli toteutettava, jotta varmistetaan yhtenäinen käyttökokemus koko alustalla – riippumatta siitä, kuinka paljon maksoit puhelimesi. Kuukausien kuluessa jokaisen Instagram-päivityksen jälkeiset raportit raportoivat samasta ongelmasta ytimekkäästi jossa tästä ongelmasta tuli jatkuva vaiva foorumin käyttäjien keskuudessa, jotka seurasivat pian jokaista iteraatiota sovellus.

Käyttäjät huomasivat samanlaisen ilmiön myös suositussa kamera- ja kuvankäsittelysovelluksessa VSCO Cam. "Uusi Android-valokuvausstandardi" mainostetut jotkut huomasivat nopeasti, että sovellus ei vastannut näitä väitteitä. Havaittu laatuhäviö ja esineiden tyyppi olivat samanlaisia ​​kuin Instagramissa, joten jotkut ajattelivat nopeasti, että pisteitä yhdistävä viiva. Tähän asti meillä oli vain spekulaatioita siitä, mistä tämä ongelma voisi johtua. Jotkut syyttivät ongelmasta suoraan Androidin sisäänrakennettuja bittikartan alennusalgoritmeja. Kaikkein painavin syy, joka oli ilmennyt, oli kuitenkin se yksinkertainen tosiasia, että Instagramissa ja mahdollisesti VSCO: ssa oli huonosti toteutettu alasnäytteenottoalgoritmi, erityisesti Lähin naapuri uudelleennäytteenotto. Mutta ilman kehittäjien virallista sanaa spekulaatiota ei voitu täysin vahvistaa.

Silloin opimme läpi VSCO: n tekninen tuki että syy niiden resoluution ja tarkkuuden menettämiseen ei ollut huono ohjelmistototeutus, vaan pikemminkin muistirajoitus Android-laitteissa:

"Useimpien Android-laitteiden muisti on melko rajoittunut, vaikka joissakin on jopa muutaman gigatavun muistia, mutta sovellukset eivät saa käyttää kaikkea saatavilla olevaa muistia, ja siksi meidän on ansaittava se, mitä Androidista meille annetaan."

"Suureiden kuvien kokoa voidaan pienentää jopa 50 % tuotaessa riippuen käyttämästäsi laitteesta ja käytettävissä olevasta muistista.

He väittävät myös, että heidän kuvankäsittelytekniikansa ovat erittäin rasittavia sekä muistille että SoC: lle Tämä yhdistettynä Android-muistin rajoituksiin on syy siihen, miksi näemme laatu pullonkaulan, jota emme löydä iOS.

Mukaan Androidin kehittäjien koulutusartikkeleita, on asetettu kova raja kasan koko jokaiselle sovellukselle ylläpitää toimivaa moniajoympäristöä. Tämä riippuu siitä, kuinka paljon RAM-muistia laitteessa on, ja jos sovellus lähestyy kasakapasiteettia, RAM-muisti saattaa loppua.

Joten ensi silmäyksellä se näyttää että VSCO: n tarina on vakuuttava, mutta tämä ei selitä joitain asioita, joita skeptikon lähestymistavan omaksuvat ihmiset eivät näytä pääsevän eroon.

Rajoitus

Hyvin pinnallisesti katsottuna voimme esittää seuraavan kysymyksen: Jos älypuhelimessa on tyypillisesti 1-2 Gt RAM-muistia ja uusimmat kannettavat prosessorit eivät pysty käsittelemään kuvaa täydellä resoluutiolla, miksi 32 Mt RAM DSLR-kamerat pystyvät että?

Otimme yhteyttä yhdelle tunnustetuista kehittäjistämme saadaksemme vahvemman mielipiteen tästä asiasta. OmniROM kehittäjä XpLoDWilD kommentoi:

”Rajoitus tässä on pikemminkin tapa, jolla kuva lasketaan tai käsitellään. GPU on nopeampi tähän, ja nopein tapa tehdä se on "ladata" kuva GPU: hun tekstuurina ja käsittele se - ongelmana on, että sinua rajoittaa grafiikkasuorittimen maksimitekstuurikoko, joka on yleensä 4096x4096."

Yleensä 8 megapikselin kuvat ovat 3 264 x 2 448, riittävän pieniä mahtumaan jopa 12 megapikselin 4 000 x 3 000 rajoihin. Uudemmat lippulaiva- ja kamerapuhelimen anturit voivat nousta jopa 13 megapikseliin, ja niiden kuvakoot ovat suurempia kuin maksimi GPU Suurin tekstuurin koko, jonka pitäisi väistämättä pienentää kuvaa rajoituksen sisällä ja menettää kokonaisuutta yksityiskohta.

"Ongelma ei ole siinä, että sovellukset ovat ladataan alennettu versiosovellukset ovat kuitenkin pikemminkin käsittelee kuvan alennettua versiotaja lataamalla käsitellyn tiedoston", hän lisäsi. "Todennäköisesti käsittelyajan lyhentämiseksi edelleen he asettivat resoluutiota vielä pienemmäksi."

XpLoDWilD ehdottaa, että hieno tasapaino Käsittelyaika ja GPU-rajoitus sen sijaan, että näyttäisit käyttäjälle täysin käsitellyn esikatselun hänen työstelemästä kuvasta, on visuaalinen muokkausprosessin apuvälineenä on alennettu pikkukuva, joka mahtuu näytölle (jokin pienempi kuin 2048x2048). Tämä pikkukuva voidaan yleensä käsitellä luotettavasti nopeasti, mutta silti antaa käyttäjälle hyvän arvion siitä, miltä kuva näyttää. Kun käyttäjä vahvistaa tekemänsä valinnat arvosäädöissä ja suodattimen valinnassa, koko resoluution kuva olisi muunnetaan taustalla - jakamalla kuva pikkukuvan resoluution kokoiseksi ruudukoksi ja käsittelemällä sitten jokainen lohko erikseen. Viimeinen vaihe merkitsisi lopullisen kuvan muodostamista suorittimessa sovittamalla jokainen alue takaisin yhdeksi suureksi täyden resoluution bittikartalle.

Tämä on yksi tapa käsitellä kuvaa alkuperäisessä resoluutiossa. Tämä on jotain, mitä Instagram ei näytä tekevän, koska näet esikatselun aina tähän hetkeen asti käsittelet kuvaa, siinä ei ole samaa kauheaa laatua ja artefakteja kuin ladattavassa kuva. Esikatselukuva ei näytä käyvän läpi brutaalista pakkausta, joten pakkaus tapahtuu lopullisen kuvan käsittelyhetkellä - mikä tulostaa huonolaatuisen kuvan.

Android-alustalla ei todellakaan ole ongelmia kuvan käsittelyssä korkealla täysresoluutiolla ja paljon vähemmän sen lataamisessa. Laitteistopuolella uusimmissa iPhoneissa on 2048-4096 tekstuurin kokorajoitus. Joten se ei todennäköisesti ole laitteistorajoitus, eikä se ole alustan rajoitus - kuten muut kehittäjät voivat ja ovat tehneet sen ympärille.

Mutta siellä oli kuitenkin korkki kasan kokoon!

Kyllä, mutta ei aivan. Java-kekolla on kohtuullinen raja, koska suuren tiheyden kuviin tarvitaan lisämuistia. Pienen tutkimuksen jälkeen löysin tämän keskustelun katkelman Google-ryhmästä, joka keskusteli Android NDK: sta tai Alkuperäinen kehityspaketti, jonka avulla kehittäjät voivat käyttää uudelleen C/C++-kielellä kirjoitettua koodia ottamalla se käyttöön sovelluksissa Java alkuperäinen käyttöliittymä, mikä tekee sovelluksen suorittamisesta jonkin verran nopeampaa, koska se tulkitaan suoraan prosessorilla virtuaalikoneen sijaan.

Keskustelussa se voi olla löytyi täältä, Googlen insinööri ja Android Framework -kehittäjä Dianne Hackborn poistaa joitakin väärinkäsityksiä Androidin muistirajoituksista. Hän huomauttaa, että "Koska tämä on NDK-luettelo, rajoitusta ei itse asiassa määrätä sinulle, koska se koskee vain Java-kasaa. Alkuperäisen kasan allokoinneilla ei ole rajoituksia... “. RAM-muistin käytöstä hän kommentoi: "Jos RAM-muistia on tarpeeksi, tiedot säilytetään RAMissa. Jos ei... no, juokset silti."

Hän sanoo myös, että ei vain ole mitään rajaa natiivi kasa, mutta kumpaakaan ei ole olemassa GPU-kasa. Vaikuttaa siis siltä, ​​että koko Android ei todellakaan ole "asettanut" mitään rajoituksia sille, kuinka paljon muistia, yleistä käsittelyä tai GPU: ta voit käyttää, koska NDK on olemassa.

Mutta silloinkin Java-keon pitäisi olla tarpeeksi suuri yhdelle kuvalleMONITORI. 13 megapikselin kuva pakkaamattomana bittikartana (ARGB 8888) kestää noin 50 Mt. Oletusarvoinen enimmäiskoko vaihtelee jopa 256 Mt tai512 mb riippuen Android-laitteesta ja Android-versiosta, jota se käyttää. Instagram kestää n 62 Mt käyttämättömänä ja System Monitor -kaaviosta päätellen RAM-muistin käyttö lisääntyy 13 megapikselin kuvan noudon ja käsittelyn aikana merkityksettömältä, ja varmasti ei lähellekään lähelle oletettavasti "Androidin asettamaa" rajaa, joka voidaan kiertää kaikesta huolimatta, ja sitä voidaan myös välttää tai lieventää käyttämällä tiettyjä algoritmeja. muut.

Johtopäätös

Kuten aiemmin mainittiin, emme ehkä koskaan tiedä koko tarinaa siitä, mitä näiden sovellusten kulissien takana tapahtuu. Mutta niiden tekijöiden tai heidän anteeksisaajiensa vastausten esittämät perustelut eivät yksinkertaisesti vaikuta kovin uskottavilta tarkasteltuna. Ongelma näyttää johtuvan keskinkertaisesta ohjelmiston toteutuksesta eikä Androidin laitteiston tai ohjelmiston tarjoamasta rajoituksesta.

Se, että on olemassa sovelluksia, jotka kiertävät pakkaamisen, sekä Androidin sisäistä toimintaa koskevan dokumentaation olemassaolo ja sisältö, Nykyinen Android-laitteisto ja asiantuntijoiden mielipiteet näyttävät viittaavan siihen epäoikeudenmukaisuuteen, jota Android-käyttäjät kohtaavat joko tahallisina tai ainakin tunnustetuina. ratkaistavissa.

Mielestäni Android-käyttäjien on aika saada paitsi totuus myös ansaitsemansa kohtelu. Vaikka voi olla, että Android-laitteet, massana, koska keskiarvo ja mediaani ovat iPhonen alapuolella laitteiston suhteen, ei ole mitään syytä alentaa standardeja ja pilata kaikkien käyttökokemuksia. Ja kun jokainen kehittäjä antaa alustalle käytettyjä jäännöksiä, käyttäjät keskittyvät yhä enemmän turhautumiseensa kehittäjiin järjestelmän sijaan - kuten sen pitäisi olla.

Luotto PixelPulse esitellylle kuvalle