2012-03-19 16 views
8

Devo essere in grado di comprimere i file PNG in fase di esecuzione ma non riesco a trovare alcuna libreria pronta per iOS in grado di farlo. JPEG non è particolarmente adatto a me perché ho bisogno del canale Alpha fornito da PNG e JPEG non lo fa. Trasformare la compressione PNG in qualcosa che posso utilizzare all'interno del mio progetto iOS è probabilmente al di là delle mie competenze/conoscenze quando si tratta di C.Libreria per compressione PNG in fase di esecuzione su iOS

Solo per essere extra-chiaro, ho bisogno di farlo in fase di esecuzione, non compilare- tempo.

+0

penso che questo possa aiutarti. http://stackoverflow.com/questions/4394491/how-to-compress-resize-image-on-iphone-os-sdk-before-uploading-to-a-server –

+0

In che formato sono i dati prima vuoi salvarlo? E ti interessa uscire dal filo conduttore? – Tommy

+0

@Malek Grazie, ma quell'elemento si concentra sul ridimensionamento dell'immagine, non sulla compressione. –

risposta

3

Prova ImageIO. Vedere ImageIO Programming Guide

+0

Grazie per l'indicizzazione di I/O immagine - potrebbe essere utile per altri progetti.Per questo progetto, sto cercando di comprimere i file PNG, che non è qualcosa che PNG supporta nativamente come parte del formato di immagine. Documentazione I/O, puoi vedere che nessuno dei tasti del dizionario PNG offre controllo sulla compressione (http://developer.apple.com/library/ios/#documentation/graphicsimaging/Reference/CGImageProperties_Reference/Reference/reference.html#//apple_ref/doc/uid/TP40005103) - se così fosse, UIImagePNGRepresentation probabilmente fornirebbe un'interfaccia per questo –

+1

@RobReuss Sono un po 'confuso su questo: i PNG sono compressi ma ci sono molti modi di codificare un PNG - ecco perché pngcrush e simili sono spesso in grado di ottenere una compressione migliore semplicemente spendendo molto più tempo a soppesare le alternative. Quindi quello che vuoi è un codificatore che puoi dire per passare più tempo a trovare un rapporto di compressione migliore invece di uno yo devi solo fidarti di usare il suo scambio di tempo/efficienza predefinito? – Tommy

+1

Scusa se non sono stato chiaro. Hai ragione - PNG ha compressione - ma iOS non espone un parametro che ti permette di controllare il grado di compressione che viene utilizzato. Quello che sto cercando è una libreria che potrei costruire in un progetto che mi consenta di prendere una UIImage e produrre un PNG più compresso di quello prodotto da UIImagePNGRepresentation. Se ci fosse un modo per usare pngcrush in fase di esecuzione, ciò risponderebbe alle mie necessità. –

1

Se davvero non hanno altro modo forse è possibile utilizzare UIImagePNGRepresentation in un modo tale da salvare un file PNG più sottile:

// load image from the one you created 
UIImage *image = [UIImage imageNamed:@"your image name"]; 
// give it a new PNG representation from the API 
NSData *pngImage = UIImagePNGRepresentation(image); 
//save it to another place 
NSError *error = nil; 
[pngImage writeToFile:@"your path" options:NSDataWritingAtomic error:&error]; 

e poi vedere se la nuova immagine è più sottile o no. Questo metodo funziona su un Mac: basta aprire i file PNG ed esportarli in un altro file PNG potrebbe ridurne le dimensioni.

+0

Penso che potresti aver frainteso la sezione 13.2. Lo scopo di tale esclusione è quello di giustificare il rifiuto di app in cui l'unico scopo è la scarica della batteria o la generazione di calore - che ci crediate o no, la gente presenta questo tipo di cose. Non dovresti essere timido nell'usare la CPU del dispositivo per la gioia del tuo cuore se si traduce in una grande esperienza utente - questo è particolarmente vero per l'iPad, dove si è meno preoccupati di proteggere una funzione fondamentale del dispositivo (come l'iPhone che ha bisogno di effettuare chiamate). –

+0

Questa è un'idea interessante su come ri-salvare il PNG, ma dubito seriamente che mi fornirà il livello di compressione che sto cercando, poiché è solo un effetto collaterale, ma mi hai incuriosito e lo testerò. –

+0

Ok, grazie per questa precisione su questa sezione, forse non ho capito perché non sono bilingue. Almeno, non pensavo alla gente che creava app così inutili ... Comunque ho rimosso questa parte della risposta. Parlaci del tuo test. – dulgan

Problemi correlati