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