Problema al cargar imágenes (UIImageJPEGRepresentation vs UIImagePNGRepresentation)

StackOverflow https://stackoverflow.com/questions/495096

  •  20-08-2019
  •  | 
  •  

Pregunta

He almacenado algunas imágenes usando la opción "Mantener + Guardar imagen" de Safari en mi biblioteca de fotos en el simulador.Cuando elijo una imagen de la biblioteca, tengo que convertirla a JPEG o PNG para poder cargarla en el servidor.El problema es que el tamaño de la imagen original es de alrededor de 200 KB, pero la imagen después de convertirla a PNG es de alrededor de 2 MB.Estoy usando UIImagePNGRepresentation para convertir UIImage oponerse a NSData y luego publicar la imagen.

  1. ¿Que me estoy perdiendo aqui?¿Por qué el tamaño de la imagen es mayor que su tamaño original?¿Cómo puedo prevenir esto?

  2. Cuál es la diferencia entre UIImageJPEGRepresentation y UIImagePNGRepresentation?¿Cuál debería usarse (recomendado)?

  3. ¿Puedo determinar el tipo de imagen cargada desde la biblioteca de fotos?

  4. ¿Cuál es el tipo predeterminado de imágenes capturadas por la cámara del iPhone?

¿Fue útil?

Solución

Supongo que la imagen original se almacena como JPEG.

PNG está diseñado para almacenar cosas como capturas de pantalla y dibujos lineales. No está diseñado para almacenar cosas como fotos.

Todo se reduce al tipo de compresión utilizada, PNG utiliza compresión sin pérdidas para que la imagen sea exactamente la misma que la imagen original. JPEG utiliza compresión con pérdida, la imagen resultante es una aproximación al original.

Si toma un JPEG con pérdida y luego lo guarda como PNG, entonces aumentará de tamaño, a menudo en una gran cantidad como ha visto.

La solución a su problema es no hacer nada a sus imágenes antes de cargarlas. Ya serán imágenes PNG, GIF o JPEG. Eso es lo que debes subir.

El formato de las imágenes guardadas por la cámara del iPhone es JPEG.

Parece que probablemente deba leer un poco en PNG y JPEG en general.

Otros consejos

Con respecto a su tercer punto, puede determinar el tipo de imagen cargada desde la biblioteca en el método de delegado del selector de imágenes de la siguiente manera:

- (void)imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info {

    // Get the image reference URL
    NSURL *referenceURL = [info objectForKey:UIImagePickerControllerReferenceURL];

    // The path extension contains the image type: JPG, PNG, GIF, etc.
    NSString *originalImageType = referenceURL.pathExtension; 

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top