圖片壓縮失真的問題記錄

最近在更改項目中的一個小bug:圖片上傳后,后臺看到的圖片太過模糊?,F(xiàn)在做一些更改。

1、之前都是按網(wǎng)上別的資料寫的這個方法:


/**

*? 壓縮圖片

*? image:將要壓縮的圖片? size:壓縮后的尺寸

*/

- (UIImage *)originalImage:(UIImage *)image scaledToSize:(CGSize)newSize

{

UIGraphicsBeginImageContext(newSize);

[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];

UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return newImage;//返回的就是已經(jīng)改變的圖片

}


然額,返回的圖片還是模糊的??


2 、后來,又重新找了新方法:


/**

*? 壓縮圖片

*? image:將要壓縮的圖片? size:壓縮后的尺寸

*/

// 下面方法,第一個參數(shù)表示區(qū)域大小。第二個參數(shù)表示是否是非透明的。如果需要顯示半透明效果,需要傳NO,否則傳YES。第三個參數(shù)就是屏幕密度了

- (UIImage *)originalImage:(UIImage *)image scaledToSize:(CGSize)newSize

{

UIGraphicsBeginImageContextWithOptions(newSize, NO, [UIScreen mainScreen].scale);

[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];

UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return newImage;

}


搞定!??

UIGraphicsBeginImageContext(size);其實就相當(dāng)于UIGraphicsBeginImageContextWithOptions(size, NO, 1.0);之所以使用這個方法生成的圖片不清晰,就是因為這個1.0。

UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale);其中size就是作圖的size,opaque意思是 不透明的 ,scale是縮放因子;

這里相當(dāng)于scale是1.0,而retina屏幕的像素肯定不是一倍像素,所以我們需要手動處理scale,用 UIGraphicsBeginImageContextWithOptions(size, NO, 0.0)這個方法去作圖。0.0的意思就是自動調(diào)整縮放因子以適配顯示屏,無論是Retina屏,還是普通屏,都可以清晰呈現(xiàn)。

這個是本人的總結(jié),如有疏漏,請指教!????????

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容