Swift UIImage擴(kuò)展支持指定壓縮大小

UIImage+Extension.swift

    //
    //  UIImage+Extension.swift
    //  逗牛
    //
    //  Created by mac on 16/3/7.
    //  Copyright ? 2016年 mac. All rights reserved.
    //
import UIKit

extension UIImage {
    
    ///對(duì)指定圖片進(jìn)行拉伸
    func resizableImage(name: String) -> UIImage {
        
        var normal = UIImage(named: name)! 
        let imageWidth = normal.size.width * 0.5
        let imageHeight = normal.size.height * 0.5  
        normal = resizableImageWithCapInsets(UIEdgeInsetsMake(imageHeight, imageWidth, imageHeight, imageWidth))
        
        return normal
    }
    
    /**
     *  壓縮上傳圖片到指定字節(jié)
     *
     *  image     壓縮的圖片
     *  maxLength 壓縮后最大字節(jié)大小
     *
     *  return 壓縮后圖片的二進(jìn)制
     */
    func compressImage(image: UIImage, maxLength: Int) -> NSData? {
        
        let newSize = self.scaleImage(image, imageLength: 300)
        let newImage = self.resizeImage(image, newSize: newSize)
        
        var compress:CGFloat = 0.9
        var data = UIImageJPEGRepresentation(newImage, compress)
        
        while data?.length > maxLength && compress > 0.01 {
            compress -= 0.02  
            data = UIImageJPEGRepresentation(newImage, compress)
        }
        
        return data
    }
    
    /**
     *  通過(guò)指定圖片最長(zhǎng)邊,獲得等比例的圖片size
     *
     *  image       原始圖片
     *  imageLength 圖片允許的最長(zhǎng)寬度(高度)
     *
     *  return 獲得等比例的size
     */
    func  scaleImage(image: UIImage, imageLength: CGFloat) -> CGSize {
        
        var newWidth:CGFloat = 0.0
        var newHeight:CGFloat = 0.0
        let width = image.size.width
        let height = image.size.height
    
        if (width > imageLength || height > imageLength){
            
            if (width > height) {
                
                newWidth = imageLength;
                newHeight = newWidth * height / width;
                
            }else if(height > width){
                
                newHeight = imageLength;
                newWidth = newHeight * width / height;
                
            }else{
                
                newWidth = imageLength;
                newHeight = imageLength;
            }
            
        }
        return CGSize(width: newWidth, height: newHeight)
    }
    
    /**
     *  獲得指定size的圖片
     *
     *  image   原始圖片
     *  newSize 指定的size
     *
     *  return 調(diào)整后的圖片
     */
    func resizeImage(image: UIImage, newSize: CGSize) -> UIImage {
        UIGraphicsBeginImageContext(newSize)
        image.drawInRect(CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
        
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        return newImage
    }

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

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

  • 轉(zhuǎn)載自:https://github.com/Tim9Liu9/TimLiu-iOS[https://github...
    香橙柚子閱讀 9,145評(píng)論 0 36
  • 目錄Swift學(xué)習(xí)資料@完整App@App框架@ 響應(yīng)式框架@ UI@ 日歷三方庫(kù)@下拉刷新@模糊效果@富文本@圖...
    IOS開(kāi)發(fā)攻城獅_Fyc閱讀 6,537評(píng)論 1 90
  • 暮色四合之際,從陽(yáng)臺(tái)上遠(yuǎn)望,對(duì)面青山擋住了視線(xiàn)。心里在想些什么,卻又說(shuō)不清想了什么,就那樣保持著哲人似的沉思,回到...
    卜悠悠閱讀 294評(píng)論 0 0
  • 三原則:圖原創(chuàng),文原創(chuàng),詩(shī)原創(chuàng)。 時(shí)光靜好, 一江煙波浩渺。 故鄉(xiāng)不老, 兩岸綠樹(shù)環(huán)繞。 蛙鳴碧草, 夏日了猶未了...
    秋水飲馬閱讀 611評(píng)論 77 62
  • 這里的油菜花比其他地方的都要晚一些,它開(kāi)在七月的陽(yáng)光下,成片的金黃色,在高原的陽(yáng)光下,顯得尤為的耀眼,這里是青海,...
    花間妖閱讀 341評(píng)論 0 5

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