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