我想知道UIImagePickerController
camara 或 library 拍摄的图像大小。有什么办法可以找到吗?
要求就像,
如果图像大小超过 1 MB,我想压缩它。
提前致谢。
我想知道UIImagePickerController
camara 或 library 拍摄的图像大小。有什么办法可以找到吗?
要求就像,
如果图像大小超过 1 MB,我想压缩它。
提前致谢。
尝试这个:
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]);
获取图像大小:
NSData *data_size = UIImagePNGRepresentation(yourImage);
int image_size =[data_size length];
愿此代码为您工作。它不会为您提供字节或 mb 大小的图像。但是此代码根据您的自定义尺寸(如 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
如果您有路径,您可以询问文件管理器:
attributesOfItemAtPath:error:
键 'NSFileSize' 是您在字典中查找的内容。
如果你有像jinx说的那样的路径,你可以这样做
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;
}