/ / Come posso ridurre la qualità di UIImage senza ridurre la risoluzione? - Ios, veloce

Come posso ridurre la qualità di UIImage senza ridurre la risoluzione? - Ios, veloce

Ho un limite di upload di 2 MB con le mie immagini. Quindi, se un utente prova a caricare un'immagine più grande di 2 MB, vorrei ridurne le dimensioni senza ridurre la risoluzione.

Come ci riesco? Ho provato qualcosa del genere ma non ha funzionato:

        var fileSize = UIImageJPEGRepresentation(image, 1)!.length
print("before File size:")
print(fileSize)

while fileSize > MyConstants.MAX_ATTACHMENT_SIZE{

let mydata = UIImageJPEGRepresentation(image, 0.75)
fileSize = mydata!.length
image = UIImage(data: mydata!)!

print("make smaller (fileSize)")
}

print("after File size:")
print(UIImageJPEGRepresentation(image, 1)!.length)

produzione:

before File size:
2298429
make smaller 846683
after File size:
2737491

risposte:

-1 per risposta № 1

Come ha detto @Lion, dovrai giocare con la qualità per ottenere una dimensione del file piacevole. Ho notato tuttavia che:

print(UIImageJPEGRepresentation(image, 1)!.length)

Stampa la lunghezza dell'immagine alla massima qualità. Questo è fuorviante poiché all'interno della condizione while, si stanno ottenendo dimensioni di file inferiori.

while fileSize > MyConstants.MAX_ATTACHMENT_SIZE{

let mydata = UIImageJPEGRepresentation(image, 0.75)
fileSize = mydata!.length
image = UIImage(data: mydata!)!

print("make smaller (fileSize)")
}

-1 per risposta № 2
  let mydata = UIImageJPEGRepresentation(image, 0.75)
fileSize = mydata!.length
image = UIImage(data: mydata!)!

Questo è l'approccio giusto. È possibile impostare una scala diversa da 0.1 to 1 che quanto vuoi ridurre la qualità e le dimensioni dell'immagine.

print(UIImageJPEGRepresentation(image, 1)!.length) questa riga aumenta nuovamente la qualità e le dimensioni o la risoluzione dell'immagine al massimo (because scale = 1)