(网络摘抄)UIImage指定大小裁剪图片

/**

 *  图片自适应大小处理

 *

 *  @param sourceImage 原图

 *  @param targetSize  需要适应的大小

 *

 *  @return 返回适应大小后的图片

 */

- (UIImage*)imageWithImage:(UIImage*)sourceImage scaledToSizeWithSameAspectRatio:(CGSize)targetSize

{

    CGSize imageSize = sourceImage.size;

    CGFloat width = imageSize.width;

    CGFloat height = imageSize.height;

    CGFloat targetWidth = targetSize.width;

    CGFloat targetHeight = targetSize.height;

    CGFloat scaleFactor = 0.0;

    CGFloat scaledWidth = targetWidth;

    CGFloat scaledHeight = targetHeight;

    CGPoint thumbnailPoint = CGPointMake(0.0,0.0);

    

    if (CGSizeEqualToSize(imageSize, targetSize) == NO) {

        CGFloat widthFactor = targetWidth / width;

        CGFloat heightFactor = targetHeight / height;

        

        if (widthFactor > heightFactor) {

            scaleFactor = widthFactor; // scale to fit height

        }

        else {

            scaleFactor = heightFactor; // scale to fit width

        }

        

        scaledWidth  = width * scaleFactor;

        scaledHeight = height * scaleFactor;

        

        // center the image

        if (widthFactor > heightFactor) {

            thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;

        }

        else if (widthFactor < heightFactor) {

            thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;

        }

    }

    

    CGImageRef imageRef = [sourceImage CGImage];

    CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);

    CGColorSpaceRef colorSpaceInfo = CGImageGetColorSpace(imageRef);

    

    if (bitmapInfo == kCGImageAlphaNone) {

        bitmapInfo = kCGImageAlphaNoneSkipLast;

    }

    

    CGContextRef bitmap;

    

    if (sourceImage.imageOrientation == UIImageOrientationUp ||sourceImage.imageOrientation == UIImageOrientationDown) {

        bitmap = CGBitmapContextCreate(NULL, targetWidth, targetHeight,CGImageGetBitsPerComponent(imageRef),CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo);

        

    } else {

        bitmap = CGBitmapContextCreate(NULL, targetHeight, targetWidth,CGImageGetBitsPerComponent(imageRef),CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo);

        

    }

    

    // In the right or left cases, we need to switch scaledWidth and scaledHeight,

    // and also the thumbnail point

    if (sourceImage.imageOrientation == UIImageOrientationLeft) {

        thumbnailPoint = CGPointMake(thumbnailPoint.y, thumbnailPoint.x);

        CGFloat oldScaledWidth = scaledWidth;

        scaledWidth = scaledHeight;

        scaledHeight = oldScaledWidth;

        

        CGContextRotateCTM (bitmap, 90);

        CGContextTranslateCTM (bitmap, 0, -targetHeight);

        

    } else if (sourceImage.imageOrientation ==UIImageOrientationRight) {

        thumbnailPoint = CGPointMake(thumbnailPoint.y, thumbnailPoint.x);

        CGFloat oldScaledWidth = scaledWidth;

        scaledWidth = scaledHeight;

        scaledHeight = oldScaledWidth;

        

        CGContextRotateCTM (bitmap, -90);

        CGContextTranslateCTM (bitmap, -targetWidth, 0);

        

    } else if (sourceImage.imageOrientation == UIImageOrientationUp) {

        // NOTHING

    } else if (sourceImage.imageOrientation == UIImageOrientationDown){

        CGContextTranslateCTM (bitmap, targetWidth, targetHeight);

        CGContextRotateCTM (bitmap, -180.);

    }

    

    CGContextDrawImage(bitmap, CGRectMake(thumbnailPoint.x,thumbnailPoint.y, scaledWidth, scaledHeight), imageRef);

    CGImageRef ref = CGBitmapContextCreateImage(bitmap);

    UIImage* newImage = [UIImage imageWithCGImage:ref];

    

    CGContextRelease(bitmap);

    CGImageRelease(ref);

    

    return newImage;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值