una tamaño porcentaje pagina mostrar insertar imagen etiqueta desde como carpeta cambiar ios uiimageview uiimage nsurl sdwebimage

ios - tamaño - cómo obtener el ancho y alto de la imagen desde la url sin descargar?



insertar imagen html5 (4)

Intente jugar con las diferentes opciones de contentMode para obtener el aspecto que desea. Un ejemplo podría ser cell.shopImageView.contentMode = UIViewContentModeScaleAspectFit; Eso solo hará que la imagen se ajuste bien, pero no cambiará el tamaño de la vista de la imagen.

Aquí están sus opciones de contentMode : UIViewContentModes

Una alternativa podría ser algo similar a esto:

NSData *data = [[NSData alloc]initWithContentsOfURL:URL]; UIImage *image = [[UIImage alloc]initWithData:data]; CGFloat height = image.size.height; CGFloat width = image.size.width;

A continuación, puede establecer su altura / ancho de la imagen dependiendo de la relación de altura / ancho de la imagen.

Estoy usando SDWebImage para mostrar imágenes dentro de las celdas. Pero es perfecto mached al marco de UImageView que estoy haciendo en el código a continuación:

NSString * s =[NSString stringWithFormat:@"url of image to show"]; NSURL *url = [NSURL URLWithString:s]; [cell.shopImageView sd_setImageWithURL:url];

Mi UIImageView tiene un tamaño de 50x50.

Por ejemplo, la imagen de url tiene un tamaño de 990x2100 y mi imagen no se muestra bien en el marco dado. En este caso, cuando la altura es mayor, quiero cambiar el tamaño de mi imagen por la relación de altura adecuada para que coincida con el ancho 50.

¿Hay alguna manera de verificar el tamaño de la imagen desde la URL sin descargarlo y asignar la memoria de manera horrible?


  • No sé cómo obtener el tamaño de su imagen desde la URL sin descargar la imagen.

  • Pero puedo proporcionarle un fragmento de código para hacer que su marco UIImageView proporcionalmente después de que se descargue la imagen.

    NSData *data = [[NSData alloc]initWithContentsOfURL:URL]; // -- avoid this.

  • Si usa el método anterior para descargar la imagen, bloqueará su UI. Así que por favor evítenlo.

    [cell.shopImageView ....]; // -- avoid this method.

  • Como está utilizando SDWebImage , supongo que tendrá algunos métodos dedicados para descargar la imagen primero. Por lo tanto, puede usar ese método para descargar la imagen en lugar de utilizar el método de categorías UIImageView como utilizó anteriormente.

  • Después de descargar la imagen. Pruebe algo como a continuación.

  • Fragmento de código

  • Supongamos que la imagen se descarga y el objeto es ''theImage'', y ''imageView'' como su imagen de celda

    float imageRatio = theImage.size.width/theImage.size.height; float widthWithMaxHeight = imageView.frame.size.height * imageRatio; float finalWidth, finalHeight; if (widthWithMaxHeight > imageView.frame.size.width) { finalWidth = imageView.frame.size.width; finalHeight = imageView.frame.size.width/imageRatio; } else { finalHeight = imageView.frame.size.height; finalWidth = imageView.frame.size.height * imageRatio; } [imageView setFrame:CGRectMake(xOffset, yOffset, finalWidth, finalHeight)]; [imageView setImage:theImage];


let ImageArray = ((arrFeedData[indexPath.row] as AnyObject).value(forKey: "social_media_images") as? NSArray)! var ImageURL: String = ((ImageArray[0] as AnyObject) as? String)! ImageURL = ImageURL.addingPercentEscapes(using: String.Encoding.ascii)! let imageUrl = URL(string: ImageURL) let imageData = try Data(contentsOf: imageUrl!) let image = UIImage(data: imageData) print("image height: /(image?.size.height)" print("image Width: /(image?.size.width)")


Puede obtener estos datos del encabezado URL, en Swift 3.0 utilice el código siguiente

if let imageSource = CGImageSourceCreateWithURL(url! as CFURL, nil) { if let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) as Dictionary? { let pixelWidth = imageProperties[kCGImagePropertyPixelWidth] as! Int let pixelHeight = imageProperties[kCGImagePropertyPixelHeight] as! Int print("the image width is: /(pixelWidth)") print("the image height is: /(pixelHeight)") } }