日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图片压缩处理的一个可行解决方法【OC】

發布時間:2025/3/18 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图片压缩处理的一个可行解决方法【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】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。