I want to know the size of image taken by UIImagePickerController
by camara or library. Is there any way to find that ?
Requirement is like,
If
If you have a path you could ask file manager:
attributesOfItemAtPath:error:
The key 'NSFileSize' is what you're looking for in the dictionary.
try this:
CGFloat compression = 0.8f;
CGFloat maxCompression = 0.1f;
int maxFileSize = 1024;
UIImage *img =[UIImage imageNamed:@"anyimg.jpg"];
NSData *imageData = UIImageJPEGRepresentation(img, compression);
while ([imageData length] > maxFileSize && compression > maxCompression)
{
compression -= 0.1;
imageData = UIImageJPEGRepresentation(img, compression);
NSLog(@"%d",[imageData length]);
}
NSLog(@"image size %d",[imageData length]);
For get image size:
NSData *data_size = UIImagePNGRepresentation(yourImage);
int image_size =[data_size length];
If you have a path like jinx said, you could do this
NSNumber *theFileSize = [NSNumber numberWithInt:0];
NSFileManager * filemanager = [NSFileManager defaultManager];
if([filemanager fileExistsAtPath:fullFilePath])
{
NSDictionary * attributes = [filemanager attributesOfItemAtPath:fullFilePath error:nil];
theFileSize = [attributes objectForKey:NSFileSize];
}
[self convertbyteToKB_MB:[theFileSize intValue];
...
-(NSString*)convertbyteToKB_MB:(int)byte
{
NSString *retSize = [NSString stringWithFormat:@"%d bytes",byte];
float fByte = byte;
if (byte > 1024)
{
//Kilobytes
fByte = fByte / 1024;
retSize = [NSString stringWithFormat:@"%.1f KB",fByte];
}
if (fByte > 1024)
{
//Megabytes
fByte = fByte / 1024;
retSize = [NSString stringWithFormat:@"%.1f MB",fByte];
}
return retSize;
}
May this code work for you. It is not giving you image in size like bytes or mb. But this code give you image according to Your custom size like 100x200.
@implementation UIImage (CS_Extensions)
- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize {
UIImage *sourceImage = self;
UIImage *newImage = nil;
CGSize imageSize = sourceImage.size;
CGFloat width = imageSize.width;
CGFloat height = imageSize.height;
CGFloat targetWidth = targetSize.width;
CGFloat targetHeight = targetSize.height;
CGFloat scaleFactor = 0.0;
CGFloat scaledWidth = targetWidth;
CGFloat scaledHeight = targetHeight;
CGPoint thumbnailPoint = CGPointMake(0.0,0.0);
if (CGSizeEqualToSize(imageSize, targetSize) == NO) {
CGFloat widthFactor = targetWidth / width;
CGFloat heightFactor = targetHeight / height;
if (widthFactor < heightFactor)
scaleFactor = widthFactor;
else
scaleFactor = heightFactor;
scaledWidth = width * scaleFactor;
scaledHeight = height * scaleFactor;
// center the image
if (widthFactor < heightFactor) {
thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;
} else if (widthFactor > heightFactor) {
thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
}
}
// this is actually the interesting part:
UIGraphicsBeginImageContext(targetSize);
CGRect thumbnailRect = CGRectZero;
thumbnailRect.origin = thumbnailPoint;
thumbnailRect.size.width = scaledWidth;
thumbnailRect.size.height = scaledHeight;
[sourceImage drawInRect:thumbnailRect];
newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if(newImage == nil) NSLog(@"could not scale image");
return newImage ;
}
@end