在不影响目标质量的情况下收缩图像
如何缩小图像而不影响质量的程序化。
捕获图像后,我想要减less该图像的大小,而不会改变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左右
希望这可以帮助
快乐编码…
我对这个话题进行了很多search。 几天后,我发现了这一个。 希望这比公认的答案快得多。
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);
这对我很好! 尝试一次。