图片压缩处理的一个可行解决方法【OC】
生活随笔
收集整理的這篇文章主要介紹了
图片压缩处理的一个可行解决方法【OC】
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
##描述一下 開(kāi)發(fā)中遇到一個(gè)需求,需要通過(guò)wifi鏈接到一款相機(jī)內(nèi)存卡,將圖片保存到本地,然后上傳服務(wù)器,這個(gè)功能主要是為了可以方便查看圖片,所以圖片的大小需要壓縮,于是想到的方法有三種,質(zhì)量壓縮,大小壓縮,質(zhì)量和大小共同壓縮使用。
質(zhì)量壓縮方法
UIImageJPEGRepresentation(<#UIImage * _Nonnull image#>, <#CGFloat compressionQuality#>)大小壓縮
//壓縮圖片為指定大小 - (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size {// 并把它設(shè)置成為當(dāng)前正在使用的contextUIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);// 繪制改變大小的圖片[img drawInRect:CGRectMake(0,0, size.width, size.height)];// 從當(dāng)前context中創(chuàng)建一個(gè)改變大小后的圖片UIImage* scaledImage =UIGraphicsGetImageFromCurrentImageContext();// 使當(dāng)前的context出堆棧UIGraphicsEndImageContext();//返回新的改變大小后的圖片return scaledImage; }上面兩種方法雖然可以壓縮圖片。但是效果不太理想,第一種質(zhì)量壓縮總是無(wú)法很準(zhǔn)確的壓縮到相應(yīng)大小,第二種尺寸壓縮有時(shí)候因?yàn)樗璐笮”容^小,就造成了圖像太過(guò)模糊,影響效果,所以最后采用兩種方法結(jié)合的方式進(jìn)行壓縮,先壓縮質(zhì)量,盡可能保證圖片的尺寸不發(fā)生變化,如果沒(méi)有達(dá)到壓縮要求,再相應(yīng)的壓縮圖片尺寸,這樣壓縮之后就能盡可能的保證圖片的清晰度了。
質(zhì)量大小壓縮相結(jié)合
- (UIImage *)compressSizeAndQualityImage:(UIImage *)image toByte:(NSUInteger)maxLength {CGFloat compressQuality = 1;NSData *data = UIImageJPEGRepresentation(image, compressQuality);if (data.length < maxLength) {//質(zhì)量小于壓縮大小return image;}/*壓縮質(zhì)量*///指定大小壓縮比例compressQuality = (CGFloat)maxLength/(CGFloat)data.length;data = UIImageJPEGRepresentation(image, compressQuality);UIImage *resultImage = [UIImage imageWithData:data];if (data.length < maxLength) {//質(zhì)量小于壓縮大小return resultImage;}/*壓縮大小*/NSUInteger lastDataLenth = 0;while (data.length > maxLength && data.length != lastDataLenth) {lastDataLenth = data.length;//計(jì)算壓縮比例CGFloat compressSize = (CGFloat) maxLength/(CGFloat)data.length;CGSize size = CGSizeMake((NSUInteger)(resultImage.size.width * sqrtf(compressSize)), (NSUInteger)(resultImage.size.height * sqrtf(compressSize)));UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);[resultImage drawInRect:CGRectMake(0, 0, size.width, size.height)];resultImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();data = UIImageJPEGRepresentation(resultImage, 1);}return resultImage;}轉(zhuǎn)載于:https://my.oschina.net/snOS/blog/1539666
總結(jié)
以上是生活随笔為你收集整理的图片压缩处理的一个可行解决方法【OC】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【推导】【NTT】hdu6061 RXD
- 下一篇: 遇到ORA-3136的解决之道