cambiar el tamaño de UIImage proporcionalmente a continuación, recortar

Estoy usando este código para cambiar el tamaño de una image tomada con la camera. Lo networkinguzco proporcionalmente a una miniatura, pero luego me gustaría recortarlo en un formatting cuadrado de 60×60. Intenté incorporar:

CGImageRef imageRef = CGImageCreateWithImageInRect(CGImage, rect); 

pero no logré que funcione correctamente. ¿Cómo haría esto usando Core Graphics?

 - (UIImage *) resizeCaptunetworkingImage:(UIImage *) img toWidth:(float) w{ CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB(); CGContextRef ctx = CGBitmapContextCreate(NULL,w,w, 8, 0, colorspace,kCGImageAlphaPremultipliedFirst); CGContextDrawImage(ctx, CGRectMake(0, 0, w,img.size.width*w/img.size.height), img.CGImage); CGImageRef thumb = CGBitmapContextCreateImage(ctx); UIImage *final = [UIImage imageWithCGImage:thumb scale:1.0 orientation:UIImageOrientationRight]; return final; } 

Aquí pongo la lógica de la image de Recortar y cambiar el tamaño, utilícela según tu requerimiento.

Para get image recortada:

 UIImage *croppedImg = nil; CGRect cropRect = CGRectMake(AS YOu Need); // set frame as you need croppedImg = [self croppIngimageByImageName:self.imageView.image toRect:cropRect]; 

El siguiente método que devuelve 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 use el siguiente método con alto y ancho de image para el cambio de tamaño:

 + (UIImage*)resizeImage:(UIImage*)image withWidth:(CGFloat)width withHeight:(CGFloat)height { CGSize newSize = CGSizeMake(width, height); CGFloat widthRatio = newSize.width/image.size.width; CGFloat 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.

Solo quería señalar que para el performance es mejor recortar primero la image y luego cambiar el tamaño de la parte recortada que cambiar el tamaño de la image completa y luego recortarla. Especialmente para imágenes más grandes.