Red de conocimiento informático - Aprendizaje de programación - ¿Cómo detectar o evitar la corrupción de los archivos png descargados de iOS?

¿Cómo detectar o evitar la corrupción de los archivos png descargados de iOS?

Al leer el código fuente y los requisitos de MKNetworkKit, descubrí que se utiliza ImageIO.framework. Este marco debe realizar el procesamiento de secuencia en los datos de la imagen; de lo contrario, puede ocurrir un caos en los datos. Esta situación aún no se ha encontrado incluso cuando la red es muy pobre.

Añadido: 26 de noviembre de 2014:

Descubrí que después de introducir ImageIO, las imágenes a veces todavía se corrompen. Cuando estaba a punto de rendirme, requirió mucho esfuerzo. Sin solución en stackoverflow y google, leí el código fuente y las instrucciones oficiales de UIImage, UIImageView e ImageIO, y encontré un problema complicado. El método requiere escribir lo siguiente. Código de dos pasos:

1. Leer los datos de la imagen. Luego llame al método en 2 para verificación

NSData* data = [NSData dataWithContentsOfFile:imagePath];

2. Determine si es una imagen PNG válida. Para JPG, utilice el. UIImageJPEGMétodo de representación

/**

* Verificar si la imagen es una imagen PNG válida

*

* @param imageData obtenidos directamente del objeto NSData del archivo de imagen

*

* * @return Si es una imagen PNG válida

*/

*/

>- (BOOL)isValidPNGByImageData: (NSData*)imageData

{

UIImage* imagen = [UIImage imageWithData:imageData];

//No. Un caso: pase [UIImage imageWithData:data]; al generar la imagen directamente, si la imagen es nula, imageData debe ser inválida

if (image == nil && imageData != nil ) {

Return NO;

}

// Segundo caso: Algunas partes de la imagen no tienen problemas, pero algunas partes están dañadas. el primer paso de la calibración. En este caso se debe utilizar el siguiente método. Convierta la imagen a datos PNG. Si los datos PNG se pueden generar correctamente, la imagen está completa. De lo contrario, la imagen está dañada.

NSData* tempData = UIImagePNGRepresentation(image);

if (tempData == nil) {

devuelve NO;

} else {

devuelve SÍ;

}

}

}

}