titlelabel color buttons iphone uiimage

iphone - color - Obtener el tamaño de un UIImage(longitud de bytes) no alto y ancho



menu ios (9)

Estoy tratando de obtener la longitud de un UIImage . No el ancho o alto de la imagen, sino el tamaño de los datos.


Ejemplo en Swift :

let img: UIImage? = UIImage(named: "yolo.png") let imgData: NSData = UIImageJPEGRepresentation(img, 0) println("Size of Image: /(imgData.length) bytes")


Esta es la forma más rápida, limpia, general y menos propensa a errores para obtener la respuesta. En una categoría UIImage+MemorySize :

#import <objc/runtime.h> - (size_t) memorySize { CGImageRef image = self.CGImage; size_t instanceSize = class_getInstanceSize(self.class); size_t pixmapSize = CGImageGetHeight(image) * CGImageGetBytesPerRow(image); size_t totalSize = instanceSize + pixmapSize; return totalSize; }

O si solo desea el mapa de bits real y no el contenedor de instancia de UIImage, entonces es realmente tan simple como esto:

- (size_t) memorySize { return CGImageGetHeight(self.CGImage) * CGImageGetBytesPerRow(self.CGImage); }


Los datos subyacentes de un UIImage pueden variar, por lo que para la misma "imagen" se puede tener diferentes tamaños de datos. Una cosa que puedes hacer es usar UIImagePNGRepresentation o UIImageJPEGRepresentation para obtener las construcciones de NSData equivalentes para cualquiera de ellos, luego verifica el tamaño de eso.


No estoy seguro de tu situación. Si necesita el tamaño de bytes real, no creo que lo haga. Puede usar UIImagePNGRepresentation o UIImageJPEGRepresentation para obtener un objeto NSData de datos comprimidos de la imagen.

Creo que quieres obtener el tamaño real de la imagen sin comprimir (datos de píxeles). Debe convertir UIImage * o CGImageRef a datos sin procesar. Este es un ejemplo de conversión de UIImage a IplImage (de OpenCV). Solo necesita asignar suficiente memoria y pasar el puntero al primer argumento de CGBitmapContextCreate.

UIImage *image = //Your image CGImageRef imageRef = image.CGImage; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); IplImage *iplimage = cvCreateImage(cvSize(image.size.width, image.size.height), IPL_DEPTH_8U, 4); CGContextRef contextRef = CGBitmapContextCreate(iplimage->imageData, iplimage->width, iplimage->height, iplimage->depth, iplimage->widthStep, colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrderDefault); CGContextDrawImage(contextRef, CGRectMake(0, 0, image.size.width, image.size.height), imageRef); CGContextRelease(contextRef); CGColorSpaceRelease(colorSpace); IplImage *ret = cvCreateImage(cvGetSize(iplimage), IPL_DEPTH_8U, 3); cvCvtColor(iplimage, ret, CV_RGBA2BGR); cvReleaseImage(&iplimage);


Si es necesario en forma legible para humanos, podemos usar ByteCountFormatter

if let data = UIImageJPEGRepresentation(image, 1.0) { let fileSizeStr = ByteCountFormatter.string(fromByteCount: Int64(data.count), countStyle: ByteCountFormatter.CountStyle.memory) print(fileSizeStr) }

Donde Int64(data.count) es lo que necesita en formato numérico.


Usa la propiedad CGImage de UIImage. Luego, utilizando una combinación de CGImageGetBytesPerRow *
CGImageGetHeight, agregue el tamaño de UIImage, debe estar dentro de unos pocos bytes del tamaño real.

Esto devolverá el tamaño de la imagen, sin comprimir, si desea usarla para fines como malloc en preparación para la manipulación de mapas de bits (asumiendo un formato de 4 bytes de píxeles de 3 bytes para RGB y 1 para Alpha):

int height = image.size.height, width = image.size.width; int bytesPerRow = 4*width; if (bytesPerRow % 16) bytesPerRow = ((bytesPerRow / 16) + 1) * 16; int dataSize = height*bytesPerRow;


Swift 3:

let image = UIImage(named: "example.jpg") if let data = UIImageJPEGRepresentation(image, 1.0) { print("Size: /(data.count) bytes") }


UIImage *img = [UIImage imageNamed:@"sample.png"]; NSData *imgData = UIImageJPEGRepresentation(img, 1.0); NSLog(@"Size of Image(bytes):%d",[imgData length]);


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)editInfo { UIImage *image=[editInfo valueForKey:UIImagePickerControllerOriginalImage]; NSURL *imageURL=[editInfo valueForKey:UIImagePickerControllerReferenceURL]; __block long long realSize; ALAssetsLibraryAssetForURLResultBlock resultBlock=^(ALAsset *asset) { ALAssetRepresentation *representation=[asset defaultRepresentation]; realSize=[representation size]; }; ALAssetsLibraryAccessFailureBlock failureBlock=^(NSError *error) { NSLog(@"%@", [error localizedDescription]); }; if(imageURL) { ALAssetsLibrary *assetsLibrary=[[[ALAssetsLibrary alloc] init] autorelease]; [assetsLibrary assetForURL:imageURL resultBlock:resultBlock failureBlock:failureBlock]; } }