una tamaño redimensionar programa perder para online imagenes imagen como centimetros cambiar calidad ajustar iphone ios objective-c cocoa-touch uiimageview

iphone - tamaño - Obtener el ancho de una imagen redimensionada después de UIViewContentModeScaleAspectFit



redimensionar imagen photoshop (6)

De acuerdo con la documentación de Apple para UIViewContentModeScaleAspectFit

Escala el contenido (en su caso, la imagen real) para adaptarse al tamaño de la vista (en su caso, archivo de imagen nuevo) manteniendo la relación de aspecto.

Eso significa que el tamaño de su imagen (después de la escala) debe ser el mismo que su UIImageView .

ACTUALIZACIÓN:

Una nueva sugerencia para usted si no desea usar UIViewContentModeScaleAspectFit y si puede corregir el tamaño de la imagen a escala, puede usar el código de abajo para escalar la imagen para corregir el nuevo tamaño y luego puede usar el ancho de su código.

CGSize newSize = CGSizeMake(100.0,50.0); UIGraphicsBeginImageContext( newSize ); [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();

Tengo mi UIImageView y pongo una imagen en ella que me redimensiono así:

UIImageView *attachmentImageNew = [[UIImageView alloc] initWithFrame:CGRectMake(5.5, 6.5, 245, 134)]; attachmentImageNew.image = actualImage; attachmentImageNew.backgroundColor = [UIColor redColor]; attachmentImageNew.contentMode = UIViewContentModeScaleAspectFit;

Intenté obtener el ancho de la imagen redimensionada en mi UIImageView haciendo esto:

NSLog(@"Size of pic is %f", attachmentImageNew.image.size.width);

Pero en realidad me devuelve el ancho de la imagen original. ¿Alguna idea sobre cómo consigo el marco de la imagen que veo en la pantalla?

EDITAR: Así es como se ve mi UIImageView , el área roja es su color de backgroundColor


No sé si hay una solución más clara, pero esto funciona:

float widthRatio = imageView.bounds.size.width / imageView.image.size.width; float heightRatio = imageView.bounds.size.height / imageView.image.size.height; float scale = MIN(widthRatio, heightRatio); float imageWidth = scale * imageView.image.size.width; float imageHeight = scale * imageView.image.size.height;


Para Swift 2 , puede usar este fragmento de código para alinear una imagen de Ajuste de aspecto con la parte inferior de la pantalla (muestra de respuestas anteriores a esta pregunta -> gracias a ustedes)

let screenSize: CGRect = UIScreen.mainScreen().bounds let screenWidth = CGFloat(screenSize.width) let screenHeight = CGFloat(screenSize.height) imageView.frame = CGRectMake(0, screenHeight - (imageView.image?.size.height)! , screenWidth, (imageView.image?.size.height)!) let newSize:CGSize = getScaledSizeOfImage(imageView.image!, toSize: self.view.frame.size) imageView.frame = CGRectMake(0, screenHeight - (newSize.height) , screenWidth, newSize.height) func getScaledSizeOfImage(image: UIImage, toSize: CGSize) -> CGSize { let widthRatio = toSize.width/image.size.width let heightRatio = toSize.height/image.size.height let scale = min(widthRatio, heightRatio) let imageWidth = scale*image.size.width let imageHeight = scale*image.size.height return CGSizeMake(imageWidth, imageHeight) }


Tiene la referencia de su imagen original, por lo que siempre da las mismas dimensiones que la imagen original.

Para obtener las dimensiones de la nueva imagen tienes que comprobar la relación de aspecto. Derivé una fórmula para mi necesidad usando diferentes imágenes de diferentes tamaños usando Vista previa que muestra cómo cambia el tamaño de la imagen según su relación de aspecto.


Una solución en Swift:

let currentHeight = imageView.bounds.size.height let currentWidth = imageView.bounds.size.width let newWidth = UIScreen.mainScreen().bounds.width let newHeight = (newWidth * currentHeight) / currentWidth println(newHeight)


en tu caso:

float yourScaledImageWitdh = attachmentImageNew.frame.size.height * attachmentImageNew.image.size.width / attachmentImageNew.image.size.height NSLog(@"width of resized pic is %f", yourScaledImageWitdh);

pero también debe verificar, antes, la proporción de la imagen original frente a la proporción imageView, mi línea de código es buena en caso de que el área roja se agregue horizontalmente, no en el caso de que la proporción de la imagen original sea más ancha que la proporción del marco imageView