最近在更改項目中的一個小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é),如有疏漏,請指教!????????