生活随笔
收集整理的這篇文章主要介紹了
iOS 指定压缩图片大小的解决方式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章轉(zhuǎn)自:iOS 圖片壓縮限制大小最優(yōu)解
這里的maxLength 入?yún)?可以這樣寫
比如指定 壓縮成400kb
400.f * 1024.f 即可
-(NSData *)compressWithLengthLimit
:(NSUInteger)maxLength;
-(NSData *)compressQualityWithLengthLimit
:(NSInteger)maxLength;
-(NSData *)compressMidQualityWithLengthLimit
:(NSInteger)maxLength;
-(NSData *)compressBySizeWithLengthLimit
:(NSUInteger)maxLength;
-(
NSData *)compressWithLengthLimit:(
NSUInteger)maxLength{//
Compress by quality
CGFloat compression =
1;
NSData *
data = UIImageJPEGRepresentation(self, compression);//
NSLog(@
"Before compressing quality, image size = %ld KB",
data.length/1024);if (
data.length < maxLength) return data;CGFloat max =
1;
CGFloat min =
0;for (int i =
0; i <
6; ++i) {compression = (max + min) /
2;
data = UIImageJPEGRepresentation(self, compression);//
NSLog(@
"Compression = %.1f", compression);//
NSLog(@
"In compressing quality loop, image size = %ld KB",
data.length / 1024);if (
data.length < maxLength * 0.9) {min = compression;} else if (data.length > maxLength) {max = compression;} else {break;}}//
NSLog(@
"After compressing quality, image size = %ld KB",
data.length / 1024);if (
data.length < maxLength) return data;UIImage *resultImage = [
UIImage imageWithData:
data];//
Compress by size
NSUInteger lastDataLength =
0;while (
data.length > maxLength && data.length != lastDataLength) {lastDataLength = data.length;CGFloat ratio = (CGFloat)maxLength / data.length;//NSLog(@"Ratio = %.1f", ratio);CGSize size = CGSizeMake((NSUInteger)(resultImage.size.width * sqrtf(ratio)),(NSUInteger)(resultImage.size.height * sqrtf(ratio))); // Use NSUInteger to prevent white blankUIGraphicsBeginImageContext(size);[resultImage drawInRect:CGRectMake(0, 0, size.width, size.height)];resultImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();data = UIImageJPEGRepresentation(resultImage, compression);NSLog(@"In compressing size loop, image size = %ld KB", data.length / 1024);}NSLog(@
"After compressing size loop, image size = %ld KB",
data.length / 1024);return
data;
}- (
NSData *)compressQualityWithLengthLimit:(
NSInteger)maxLength {
CGFloat compression =
1;
NSData *
data = UIImageJPEGRepresentation(self, compression);while (
data.length > maxLength && compression > 0) {compression -= 0.02;data = UIImageJPEGRepresentation(self, compression); // When compression less than a value, this code dose not work}return
data;
}-(
NSData *)compressMidQualityWithLengthLimit:(
NSInteger)maxLength{
CGFloat compression =
1;
NSData *
data = UIImageJPEGRepresentation(self, compression);if (
data.length < maxLength) return data;CGFloat max =
1;
CGFloat min =
0;for (int i =
0; i <
6; ++i) {compression = (max + min) /
2;
data = UIImageJPEGRepresentation(self, compression);if (
data.length < maxLength * 0.9) {min = compression;} else if (data.length > maxLength) {max = compression;} else {break;}}return
data;
}-(
NSData *)compressBySizeWithLengthLimit:(
NSUInteger)maxLength{
UIImage *resultImage = self;
NSData *
data = UIImageJPEGRepresentation(resultImage, 1);NSUInteger lastDataLength =
0;while (
data.length > maxLength && data.length != lastDataLength) {lastDataLength = data.length;CGFloat ratio = (CGFloat)maxLength / data.length;CGSize size = CGSizeMake((NSUInteger)(resultImage.size.width * sqrtf(ratio)),(NSUInteger)(resultImage.size.height * sqrtf(ratio))); // Use NSUInteger to prevent white blankUIGraphicsBeginImageContext(size);// Use image to draw (drawInRect:), image is larger but more compression time// Use result image to draw, image is smaller but less compression time[resultImage drawInRect:CGRectMake(0, 0, size.width, size.height)];resultImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();data = UIImageJPEGRepresentation(resultImage, 1);}return
data;
}
總結(jié)
以上是生活随笔為你收集整理的iOS 指定压缩图片大小的解决方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。