工作中遇到需要將圖片壓縮之後上傳的需求。經過多方搜索終於搞定。總結一下備用。
第一種方法,基本上是無損壓縮(肉眼基本看不出差別,不知到底損失了什麼內容)
UIImageJPEGRepresentation(image, compression)
這個方法可以將iPhone6拍攝的照片壓縮到幾百Kb的極限值,到極限值之後不管compression這個參數多小,該函數返回的數據大小都不會再改變。也就是說這個方法的壓縮是有最小值的。得到的是jpg格式。另外有一個方法UIImagePNGRepresentation(<#UIImage * _Nonnull image#>)
這個方法得到的數據會比之前那個方法得到的數據佔用空間更大。
第二種方法,基本上就是將image重新設定像素大小達到壓縮的目的
爲了達到壓縮的目的,這種方法是有損的,就是會降低圖片質量。
下面是壓縮的方法
//壓縮圖片(將圖片重畫)
- (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize
{
//首先根據image的size的長寬比和newSize進行設置新圖片的大小(爲了達到等比例縮放不變形的目的)
CGFloat wTmp;
CGFloat hTmp;
CGSize imgSize = image.size;
if (imgSize.width > imgSize.height) {
wTmp=newSize.width;
hTmp = imgSize.height * wTmp / imgSize.width;
} else {
hTmp=newSize.height;
wTmp = imgSize.width * hTmp / imgSize.height;
}
// Create a graphics image context
UIGraphicsBeginImageContext(CGSizeMake(wTmp, hTmp));
// Tell the old image to draw in this new context, with the desired
// new size
[image drawInRect:CGRectMake(0,0,wTmp,hTmp)];
// Get the new image from the context
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
// End the context
UIGraphicsEndImageContext();
// Return the new image.
return newImage;
}
這種方法的到的圖片,newSize越小質量越差,但是得到的圖片佔用內存越小。設置多大的newSize自己斟酌決定。