una tamaño sheets recortar proporciones para imagenes imagen google docs como cambiar iphone objective-c cocoa-touch ios

iphone - tamaño - redimensionar y recortar imagen centrada



recortar imagenes en google sheets (2)

así que actualmente estoy tratando de recortar y cambiar el tamaño de una imagen para que se ajuste a un tamaño específico sin perder la proporción.

una pequeña imagen para mostrar lo que quiero decir:

Jugué un poco con las categorías de vocaro pero no funcionan con png y tienen problemas con gifs. Además, la imagen no se corta.

¿Alguien tiene alguna sugerencia sobre cómo cambiar el tamaño de la mejor manera o probablemente tenga un enlace a una biblioteca / categoría existente?

¡Gracias por todos los consejos!

ps: ¿ios implementa un "seleccione un extracto" para que tenga la proporción correcta y solo tenga que escalarlo?


Encontré el mismo problema en una de mis aplicaciones y desarrollé este fragmento de código:

+ (UIImage*)resizeImage:(UIImage*)image toFitInSize:(CGSize)toSize { UIImage *result = image; CGSize sourceSize = image.size; CGSize targetSize = toSize; BOOL needsRedraw = NO; // Check if width of source image is greater than width of target image // Calculate the percentage of change in width required and update it in toSize accordingly. if (sourceSize.width > toSize.width) { CGFloat ratioChange = (sourceSize.width - toSize.width) * 100 / sourceSize.width; toSize.height = sourceSize.height - (sourceSize.height * ratioChange / 100); needsRedraw = YES; } // Now we need to make sure that if we chnage the height of image in same proportion // Calculate the percentage of change in width required and update it in target size variable. // Also we need to again change the height of the target image in the same proportion which we /// have calculated for the change. if (toSize.height < targetSize.height) { CGFloat ratioChange = (targetSize.height - toSize.height) * 100 / targetSize.height; toSize.height = targetSize.height; toSize.width = toSize.width + (toSize.width * ratioChange / 100); needsRedraw = YES; } // To redraw the image if (needsRedraw) { UIGraphicsBeginImageContext(toSize); [image drawInRect:CGRectMake(0.0, 0.0, toSize.width, toSize.height)]; result = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); } // Return the result return result; }

Puedes modificarlo según tus necesidades.


Este método hará lo que desee y es una categoría de UIImage para facilitar su uso. Fui con cambio de tamaño y luego recorte, usted podría cambiar el código con bastante facilidad si desea recortar y luego cambiar el tamaño. La comprobació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 acercarse 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