壓縮圖片到指定尺寸大小和指定文件大小之注意坑--image和data的轉(zhuǎn)化之間圖片大小發(fā)生變化

網(wǎng)上提供的大都是UIImage的回調(diào),返回image,但是我們使用的時(shí)候是作文data文件上傳的,so,很多人在測試完發(fā)現(xiàn)這個(gè)遞減的壓縮效果還是不錯(cuò)的,隨即就去用了,殊不知,壓縮后的image轉(zhuǎn)成data去使用的時(shí)候又把圖片變大了~

代碼如下:

/**

*? 壓縮圖片到指定尺寸大小

*

*? @param image 原始圖片

*? @param size? 目標(biāo)大小

*

*? @return 生成圖片

*/

+(UIImage *)compressOriginalImage:(UIImage *)image toSize:(CGSize)size{

UIImage * resultImage = image;

UIGraphicsBeginImageContext(size);

[resultImage drawInRect:CGRectMake(00, 0, size.width, size.height)];

UIGraphicsEndImageContext();

return image;

}

/**

*? 壓縮圖片到指定文件大小

*

*? @param image 目標(biāo)圖片

*? @param size? 目標(biāo)大小(最大值)

*

*? @return 返回的圖片文件

*/

+(UIImage *)compressOriginalImage:(UIImage *)image toKb:(NSInteger)kb{

if (!image) {

return image;

}

if (kb<1) {

return image;

}

kb*=1024;

CGFloat compression = 0.9f;

CGFloat maxCompression = 0.1f;

NSData *imageData = UIImageJPEGRepresentation(image, compression);

while ([imageData length] > kb && compression > maxCompression) {

compression -= 0.1;

imageData = UIImageJPEGRepresentation(image, compression);

}

//data轉(zhuǎn)成image后圖片內(nèi)存會(huì)變大,不可用

UIImage *compressedImage = [UIImage imageWithData:imageData];

return compressedImage;

}

所以我們最好直接使用data壓縮,如下處理:

-(NSData *)compressOriginalImage:(UIImage *)image toKb:(NSInteger)kb{

kb*=1024;

CGFloat compression = 0.9f;

CGFloat maxCompression = 0.1f;

NSData *imageData = UIImageJPEGRepresentation(image, compression);

while ([imageData length] > kb && compression > maxCompression) {

compression -= 0.1;

imageData = UIImageJPEGRepresentation(image, compression);

}

return imageData;

}

這樣直接返回data即可

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容