ios 圖片裁剪修改尺寸的方法總結


目前使用過的圖片裁剪方法

1、等比例壓縮 裁剪出的圖片是以asize最小值為邊框的正方形圖片

//修改圖片尺寸 同比縮放

+ (UIImage *)thumbnailWithImageWithoutScale:(UIImage *)image size:(CGSize)asize

{

    UIImage *newimage;

    if (nil == image) {

        newimage = nil;

    }   

    else{        

        CGSize oldsize = image.size;     

        CGRect rect;

        

        if (asize.width/asize.height > oldsize.width/oldsize.height) {

            

            rect.size.width = asize.height*oldsize.width/oldsize.height;

            

            rect.size.height = asize.height;

            

            rect.origin.x = (asize.width - rect.size.width)/2;

            

            rect.origin.y = 0;

            

        }

        else{

            

            rect.size.width = asize.width;

            

            rect.size.height = asize.width*oldsize.height/oldsize.width;

            

            rect.origin.x = 0;

            

            rect.origin.y = (asize.height - rect.size.height)/2;

            

        }

        

       UIGraphicsBeginImageContext(asize);

       CGContextRef context = UIGraphicsGetCurrentContext();


       CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]);     

        UIRectFill(CGRectMake(0, 0, asize.width, asize.height));//clear background

        

        [image drawInRect:rect];

  newimage = UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsEndImageContext();

    }    

    return newimage;

}

 

2、簡單粗暴地圖片裁剪方法 裁剪出的圖片尺寸按照size的尺寸,但圖片可能會被拉伸

+ (UIImage *)thumbnailWithImage:(UIImage *)originalImage size:(CGSize)size

{

    UIImage *newimage;

    

    if (nil == image) {

        

        newimage = nil;

        

    }

    

    else{

        

        UIGraphicsBeginImageContext(asize);

        

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

        

        newimage = UIGraphicsGetImageFromCurrentImageContext();

        

        UIGraphicsEndImageContext();

        

    }

    

    return newimage;

}

3、裁剪出的圖片尺寸按照size的尺寸,但圖片不拉伸,但多余部分會被裁減掉

+ (UIImage *)thumbnailWithImage:(UIImage *)originalImage size:(CGSize)size

{

        CGSize originalsize = [originalImage size];      

        //原圖長寬均小於標准長寬的,不作處理返回原圖

        if (originalsize.width<size.width && originalsize.height<size.height)

        {

            return originalImage;

        }

        

        //原圖長寬均大於標准長寬的,按比例縮小至最大適應值

        else if(originalsize.width>size.width && originalsize.height>size.height)

        {

            CGFloat rate = 1.0;

            CGFloat widthRate = originalsize.width/size.width;

            CGFloat heightRate = originalsize.height/size.height;

            

            rate = widthRate>heightRate?heightRate:widthRate;

            

            CGImageRef imageRef = nil;

            

            if (heightRate>widthRate)

            {

                imageRef = CGImageCreateWithImageInRect([originalImage CGImage], CGRectMake(0, originalsize.height/2-size.height*rate/2, originalsize.width, size.height*rate));//獲取圖片整體部分

            }

            else

            {

                imageRef = CGImageCreateWithImageInRect([originalImage CGImage], CGRectMake(originalsize.width/2-size.width*rate/2, 0, size.width*rate, originalsize.height));//獲取圖片整體部分

            }

            UIGraphicsBeginImageContext(size);//指定要繪畫圖片的大小

            CGContextRef con = UIGraphicsGetCurrentContext();

            

            CGContextTranslateCTM(con, 0.0, size.height);

            CGContextScaleCTM(con, 1.0, -1.0);

            

            CGContextDrawImage(con, CGRectMake(0, 0, size.width, size.height), imageRef);

            

            UIImage *standardImage = UIGraphicsGetImageFromCurrentImageContext();

            

            UIGraphicsEndImageContext();

            CGImageRelease(imageRef);

            

            return standardImage;

        }

        

        //原圖長寬有一項大於標准長寬的,對大於標准的那一項進行裁剪,另一項保持不變

        else if(originalsize.height>size.height || originalsize.width>size.width)

        {

            CGImageRef imageRef = nil;

            

            if(originalsize.height>size.height)

            {

                imageRef = CGImageCreateWithImageInRect([originalImage CGImage], CGRectMake(0, originalsize.height/2-size.height/2, originalsize.width, size.height));//獲取圖片整體部分

            }

            else if (originalsize.width>size.width)

            {

                imageRef = CGImageCreateWithImageInRect([originalImage CGImage], CGRectMake(originalsize.width/2-size.width/2, 0, size.width, originalsize.height));//獲取圖片整體部分

            }

            

            UIGraphicsBeginImageContext(size);//指定要繪畫圖片的大小

 

    CGContextRef con = UIGraphicsGetCurrentContext();      

            CGContextTranslateCTM(con, 0.0, size.height);

            CGContextScaleCTM(con, 1.0, -1.0);

            

            CGContextDrawImage(con, CGRectMake(0, 0, size.width, size.height), imageRef);

            

             UIImage *standardImage = UIGraphicsGetImageFromCurrentImageContext();

            NSLog(@"改變后圖片的寬度為%f,圖片的高度為%f",[standardImage size].width,[standardImage size].height);

            

            UIGraphicsEndImageContext();

            CGImageRelease(imageRef);

            

            return standardImage;

        }

        

        //原圖為標准長寬的,不做處理

        else

        {

            return originalImage;

        }

 

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM