ios 圖片壓縮的兩種方式

工作中遇到需要將圖片壓縮之後上傳的需求。經過多方搜索終於搞定。總結一下備用。

第一種方法,基本上是無損壓縮(肉眼基本看不出差別,不知到底損失了什麼內容)

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自己斟酌決定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章