Cargando image con AFNetworking: cambio de tamaño

En primer lugar, estoy usando este método AFNetworking :

 [imageView setImageWithURL:[NSURL URLWithString:@"http://site.com/img.png"]]; 

1 – ¿ Este método es asíncrono? ¿Se saveá en caching la image en el iPhone?

2 – ¿Cómo puedo recortar / cambiar el tamaño de esta image? Tengo una image de 800×600 en la URL, pero mi UIImageView es 400×400, solo quiero tener la image url recortada antes de mostrarse, para tener la misma relación, como 600×600 (no es necesario que sea 400×400, solo la misma relación). Me gusta la aplicación de facebook.

El cambio de tamaño se ha respondido en otro lugar, pero a su primera pregunta:

¿Este método es asíncrono?

Sí, es asíncrono. Puede utilizar los bloques de callback si desea procesar la image, por ejemplo:

 [imageView setImageWithURLRequest:request placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { // do image resize here // then set image view imageView.image = image; } failure:nil]; 

Luego pregunta:

¿Se saveá en caching la image en el iPhone?

Si solo busca memory caching por motivos de performance, la respuesta es un sí inequívoco. Emplea un NSCache (que se vaciará al presionar la memory). Como un lado, almacenará en caching la image como recuperada, sin reflejar ningún cambio de tamaño que haga después del hecho.

Si está buscando caching en almacenamiento persistente (es decir, un caching que persistirá incluso si termina la aplicación y lo reinicia), esa pregunta es un poco less clara. AFNetworking afirma que admite el almacenamiento en caching de disco mediante el uso de NSURLCache , pero he tenido problemas para conseguir que funcione en iOS. Si necesita un caching de almacenamiento persistente, podría sugerirle una variedad de otras categorías de UIImageView , como SDWebImage .

De todos modos, para la línea oficial de AFNetworking en el almacenamiento en caching, podría recomendarte la discusión de Caching en las Preguntas frecuentes de AFNetworking.


Si desea una vista de indicador de actividad, puede:

 UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; activityIndicatorView.center = self.imageView.center; [self.view addSubview:activityIndicatorView]; [activityIndicatorView startAnimating]; [imageView setImageWithURLRequest:request placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { [activityIndicatorView removeFromSuperview]; // do image resize here // then set image view imageView.image = image; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { [activityIndicatorView removeFromSuperview]; // do any other error handling you want here }]; 

Para Obtener Imagen de Cultivo:

 UIImage *croppedImg = nil; CGRect cropRect = CGRectMake(AS YOu Need); croppedImg = [self croppIngimageByImageName:self.imageView.image toRect:cropRect]; 

Utilice el siguiente método que devuelva UIImage ( como desee el tamaño de la image )

 - (UIImage *)croppIngimageByImageName:(UIImage *)imageToCrop toRect:(CGRect)rect { //CGRect CropRect = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height+15); CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect); UIImage *cropped = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); return cropped; } 

Aquí se obtiene la Imagen de cultivo que regresa por el método anterior;

O RESTITUCIÓN

Y también utilice el siguiente método para get una altura y un ancho específicos con la image para cambiar el tamaño de UIImage :

 + (UIImage*)resizeImage:(UIImage*)image withWidth:(int)width withHeight:(int)height { CGSize newSize = CGSizeMake(width, height); float widthRatio = newSize.width/image.size.width; float heightRatio = newSize.height/image.size.height; if(widthRatio > heightRatio) { newSize=CGSizeMake(image.size.width*heightRatio,image.size.height*heightRatio); } else { newSize=CGSizeMake(image.size.width*widthRatio,image.size.height*widthRatio); } UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0); [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; } 

Este método devuelve NewImage , con el tamaño específico que desea.

Desde AFNetworking v.2.0 hay AFCoreImageSerializer

El serializador de respuesta utilizado para crear una representación de image de los datos de respuesta y respuesta del server. De forma pnetworkingeterminada, esta es una instancia de AFImageResponseSerializer

Las subclasss de AFImageResponseSerializer se pueden usar para realizar el procesamiento posterior, como corrección de color, detección de rostros u otros efectos.

Puede usar esto para recortar la image antes de establecerla en UIImageView .

Tengo un ejemplo de código para agregar a la respuesta de Hemang.

Esto es para lo que es AFImageResponseSerializer . Simplemente cambie la escala de la image para que coincida con la escala de la image que está recuperando.

AFImageResponseSerializer *imageResponseSerializer = [self.avatarImageView imageResponseSerializer]; [imageResponseSerializer setImageScale:1.0];