如何在编程中缩小图像而不影响其质量。
在捕获图像后,我想使用Objective-C减小图像的大小,而不改变其质量。
如何在编程中缩小图像而不影响其质量。
在捕获图像后,我想使用Objective-C减小图像的大小,而不改变其质量。
以下是我用来压缩图片的代码
代码:
-(UIImage *)compressImage:(UIImage *)image{
NSData *imgData = UIImageJPEGRepresentation(image, 1); //1 it represents the quality of the image.
NSLog(@"Size of Image(bytes):%ld",(unsigned long)[imgData length]);
float actualHeight = image.size.height;
float actualWidth = image.size.width;
float maxHeight = 600.0;
float maxWidth = 800.0;
float imgRatio = actualWidth/actualHeight;
float maxRatio = maxWidth/maxHeight;
float compressionQuality = 0.5;//50 percent compression
if (actualHeight > maxHeight || actualWidth > maxWidth){
if(imgRatio < maxRatio){
//adjust width according to maxHeight
imgRatio = maxHeight / actualHeight;
actualWidth = imgRatio * actualWidth;
actualHeight = maxHeight;
}
else if(imgRatio > maxRatio){
//adjust height according to maxWidth
imgRatio = maxWidth / actualWidth;
actualHeight = imgRatio * actualHeight;
actualWidth = maxWidth;
}
else{
actualHeight = maxHeight;
actualWidth = maxWidth;
}
}
CGRect rect = CGRectMake(0.0, 0.0, actualWidth, actualHeight);
UIGraphicsBeginImageContext(rect.size);
[image drawInRect:rect];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
NSData *imageData = UIImageJPEGRepresentation(img, compressionQuality);
UIGraphicsEndImageContext();
NSLog(@"Size of Image(bytes):%ld",(unsigned long)[imageData length]);
return [UIImage imageWithData:imageData];
}
以下是使用以上代码的示例:
UIImage *org = [UIImage imageNamed:@"MacLehose Stage 7 Stunning Natural Sceneries.jpg"];
UIImage *imgCompressed = [self compressImage:org];
如果您想要更多地压缩
NSData *dataImage = UIImageJPEGRepresentation(imgCompressed, 0.0);
NSLog(@"Size of Image(bytes):%ld",(unsigned long)[dataImage length]);
通过上述方法,我能够将图像从2 MB 压缩至约50 KB。
我在这个主题上进行了很多搜索。几天后,我找到了这一个。希望它比已接受的答案更快。
NSData *imageData;
imageData=[[NSData alloc] initWithData:UIImageJPEGRepresentation((chosenImage), 1.0)];
NSLog(@"[before] image size: %lu--", (unsigned long)[imageData length]);
CGFloat scale= (100*1024)/(CGFloat)[imageData length]; // For 100KB.
UIImage *small_image=[UIImage imageWithCGImage:chosenImage.CGImage scale:scale orientation:chosenImage.imageOrientation];
imageData = UIImageJPEGRepresentation(small_image, scale*1.00);
NSLog(@"[after] image size: %lu:%f", (unsigned long)[imageData length],scale);
它对我非常有效!试试看。