Este método hará lo que quiera y es una categoría de UIImage por su facilidad de uso. Fui con el tamaño y luego recortar, podría cambiar el código con bastante facilidad si desea recortar y luego cambiar el tamaño. La verificación de límites en la función es puramente ilustrativa. Es posible que desee hacer algo diferente, por ejemplo, centrar el recorte en relación con las dimensiones de la imagen de salida, pero esto debería acercarlo lo suficiente como para realizar cualquier otro cambio que necesite.
@implementation UIImage(resizeAndCropExample)
- (UIImage *) resizeToSize:(CGSize) newSize thenCropWithRect:(CGRect) cropRect {
CGContextRef context;
CGImageRef imageRef;
CGSize inputSize;
UIImage *outputImage = nil;
CGFloat scaleFactor, width;
// resize, maintaining aspect ratio:
inputSize = self.size;
scaleFactor = newSize.height/inputSize.height;
width = roundf(inputSize.width * scaleFactor);
if (width > newSize.width) {
scaleFactor = newSize.width/inputSize.width;
newSize.height = roundf(inputSize.height * scaleFactor);
} else {
newSize.width = width;
}
UIGraphicsBeginImageContext(newSize);
context = UIGraphicsGetCurrentContext();
// added 2016.07.29, flip image vertically before drawing:
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0, newSize.height);
CGContextScaleCTM(context, 1, -1);
CGContextDrawImage(context, CGRectMake(0, 0, newSize.width, newSize.height, self.CGImage);
// // alternate way to draw
// [self drawInRect: CGRectMake(0, 0, newSize.width, newSize.height)];
CGContextRestoreGState(context);
outputImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
inputSize = newSize;
// constrain crop rect to legitimate bounds
if (cropRect.origin.x >= inputSize.width || cropRect.origin.y >= inputSize.height) return outputImage;
if (cropRect.origin.x + cropRect.size.width >= inputSize.width) cropRect.size.width = inputSize.width - cropRect.origin.x;
if (cropRect.origin.y + cropRect.size.height >= inputSize.height) cropRect.size.height = inputSize.height - cropRect.origin.y;
// crop
if ((imageRef = CGImageCreateWithImageInRect(outputImage.CGImage, cropRect))) {
outputImage = [[[UIImage alloc] initWithCGImage: imageRef] autorelease];
CGImageRelease(imageRef);
}
return outputImage;
}
@end
+1 Choise, necesito tu ayuda ahora. Si tienes la respuesta significa que pls Publicar la respuesta, Bcoz necesito lo mismo yar ** Pls ** !! –
+1 Para una presentación detallada – shashwat