2011-01-03 9 views
5

Sto lavorando su un visualizzatore di riviste per ipad e sto lottando con le prestazioni.Ottimizzazione batch di PNG per display iphone/ipad come xcode fa

Ho capito che la parte più costosa della visualizzazione dei png è il processo di caricamento. So che xcode è in grado di ottimizzare i png durante la compilazione e tali immagini vengono caricate molto più velocemente. Ma non posso includere tutte le immagini nella build in quanto sarà enorme.

Sapete come ottimizzare un png arbitrario senza includerlo nel processo di compilazione?

Sai qual è il formato migliore per iphone? Penso che i png dovrebbero usare la combinazione di colori RGB-8888 ma non sono sicuro di quale altro sia importante.

Forse conosci i parametri esatti per imagemagick?

risposta

7

Credo di aver trovato un buon articolo su png ottimizzazione per iPhone: http://iphonedevelopment.blogspot.com/2008/10/iphone-optimized-pngs.html

E cuciture che Xcode utilizza questo comando: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/iphoneos-optimize

Sembra che il comando precedente utilizza una versione modificata del pngcrush per ottimizzare i png e trasformare i canali di colore: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/pngcrush -iphone -f 0 orig.png optimized.png

E l'ottimizzazione è davvero utile. Ho 5 volte più veloce il caricamento delle immagini!

+0

Dopo aver eseguito quel comando sulla mia immagine ho salvato circa lo 0,55% ma è diventato tutto trasparente:/ – Craig

+0

@Craig: una volta ottimizzato, non è possibile aprire in modo affidabile quel PNG più a lungo con qualsiasi visualizzatore di immagini o app di elaborazione delle immagini; il PNG risultante non è conforme allo standard ed è garantito solo per essere utilizzato all'interno di un'applicazione iOS. Così l'immagine è diventata trasparente anche quando è stata caricata su iOS? Inoltre sei l'utente l'immagine non è completamente trasparente, dal momento che iphoneos-optimize fa la premoltiplicazione del canale alfa, quindi il canale alfa sarà considerato durante il rendering anche in situazioni che altrimenti ignorerebbero completamente i valori alfa. – Mecki

2

Abbiamo utilizzato Pngcrush per comprimere un numero enorme di file PNG. Puoi provare anche questo. E anche se non hai bisogno di trasparenza, invece di PNG puoi provare anche JPG. Tuttavia, è possibile eseguire una serie di prove ed errori per questo, confrontando le dimensioni e il compromesso qualità molte volte.

+0

Purtroppo non ho familiarità con imagemagick. Quindi non posso dire nulla in merito. – taskinoor

+0

Mi interessa solo la velocità di caricamento. Le dimensioni non contano. Ma proverò con pngcrush che è anche usato da xcode –

+0

Il tempo di caricamento dipende dalla dimensione delle cose che stai caricando. Non è vero? – taskinoor

5

I risultati migliori che conosco si ottengono con ImageOptim, che uso io per i PNG che non vengono distribuiti tramite Xcode. Usa pngcrush e alcuni altri strumenti di ottimizzazione PNG per ottenere la migliore compressione. Per quanto ne so, non impiega però alfa premoltiplicazione e scambio di byte. ImageOptim ha anche una bella GUI con supporto drag-and-drop e può distruggere più file contemporaneamente.

+1

+1 ImageOptim - app davvero bella. –

+0

ImageOptim è ottimo ma Xcode per iOS annulla l'ottimizzazione. Vedi http://bjango.com/articles/pngcompression/. –

+0

@Danyal Aytekin: questo è risolvibile - http://imageoptim.com/xcode.html – Kornel

0

Prova http://texturepacker.com

Può non solo di ottimizzare PNG ma riducono anche i colori per esempio a RGBA4444 o RGB565 che riduce drasticamente le dimensioni del ping e migliora il rendering sui dispositivi.

Si potrebbe anche esportare file PVR per i dispositivi che lo supportano (ad esempio iOS, Android un po ')

e supporta anche il ridimensionamento immagini per i dispositivi a bassa risoluzione.

+1

La quantizzazione stupida a livelli fissi come 4444 perde inutilmente la qualità. Ho scritto [median cut posterizer] ([GUI] (http://pngmini.com)) che sceglie i livelli percettivamente - non fa molta differenza per sgonfiare algoritmo, ma rende agli esseri umani. – Kornel

1

Ho molto spazio in abbondanza usando pngnq, ma non ho fatto alcun test per vedere se la decodifica dell'immagine lo rallenta del tutto.

2

Nella dimensione del file my benchmark risultava più importante della preelaborazione Xcode (i file Xcode erano più grandi e più lento da caricare).

modo migliore per ridurre le dimensioni del file PNG è quello di convertirlo in formato PNG8 + alpha - è possibile farlo in batch with pngquant (o modificare manualmente con GUI).

Tuttavia, se nel tuo caso la conversione da RGBA a BGRA premoltiplicato è ciò che richiede più tempo, quindi a fork of AdvanceCOMP with XCode proprietary extensions added consentirà di convertire in batch i PNG nel formato nativo di iOS.

2

ho avuto modo di sperimentare con pngnq, pngquant, pngcrush, optipng, ecc

Per il mio gruppo di PNG, ho raggiunto dimensione minima del file con pngquant, pngnq e Pngcrush

Dir.glob("**/*.png").each do |file| 
    ['pngnq -e .png -f', 'pngquant -f -speed 1 -ext .png', 'pngcrush'].each do |command| 
    puts "#{command} #{file}" 
    `#{command} #{file}` 
    end 
end 

Altro dettagli a: http://l4u.github.com/blog/2012/04/02/optimizing-file-sizes-of-png-images/

+0

Si prega di includere un po 'di codice nelle vostre risposte. Preferiamo le risposte che non sono solo link e hanno il loro contenuto. – jjnguy

+0

Il collegamento punta al mio codice. – l4u

+0

Lo so. Ma sarebbe bello se le persone non dovessero seguire un link dal sito per ottenere la loro risposta. – jjnguy

Problemi correlati