UIImage 绘制 裁剪 基本功能

// 合并两张图

- (UIImage*)mergeImage:(UIImage*)img1 andImage:(UIImage*)img2 imagePoint:(CGPoint)point

{

    CGFloat width = img2.size.width + point.x;

    CGFloat height = img2.size.height + point.y;

    

    //开始绘制图片

    UIGraphicsBeginImageContext(CGSizeMake(width, height));

    CGContextRef gc =UIGraphicsGetCurrentContext();

    //坐标系转换

    //因为CGContextDrawImage会使用Quartz内的以左下角为(0,0)的坐标系

    CGContextTranslateCTM(gc,0, height);

    CGContextScaleCTM(gc,1, -1);

    CGContextDrawImage(gc,CGRectMake(0,0, img1.size.width, img1.size.height), [img1CGImage]);

    CGContextDrawImage(gc,CGRectMake(point.x, point.y, img2.size.width, img2.size.height), [img2CGImage]);

    

    UIImage *destImg =UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    

    return destImg;

}


// 裁剪图片

- (UIImage*)cutImage:(UIImage*)image frame:(CGRect)rc

{

    if (image ==nil) {

        returnnil;

    }

    

    CGImageRef subImageRef =CGImageCreateWithImageInRect(image.CGImage, rc);

    UIImage *dstImg = [UIImageimageWithCGImage:subImageRef];

    return dstImg;

}


// 当发现剪切后,图像方向旋转了,好的,先用下面的方法把图片进行翻转后,再尝试剪切。

- (UIImage *)fixOrientation:(UIImage *)aImage {

    

    // No-op if the orientation is already correct

    if (aImage.imageOrientation ==UIImageOrientationUp)

        return aImage;

    

    // We need to calculate the proper transformation to make the image upright.

    // We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.

    CGAffineTransform transform =CGAffineTransformIdentity;

    

    switch (aImage.imageOrientation) {

        case UIImageOrientationDown:

        case UIImageOrientationDownMirrored:

            transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);

            transform = CGAffineTransformRotate(transform, M_PI);

            break;

            

        case UIImageOrientationLeft:

        case UIImageOrientationLeftMirrored:

            transform = CGAffineTransformTranslate(transform, aImage.size.width,0);

            transform = CGAffineTransformRotate(transform, M_PI_2);

            break;

            

        case UIImageOrientationRight:

        case UIImageOrientationRightMirrored:

            transform = CGAffineTransformTranslate(transform, 0, aImage.size.height);

            transform = CGAffineTransformRotate(transform, -M_PI_2);

            break;

        default:

            break;

    }

    

    switch (aImage.imageOrientation) {

        case UIImageOrientationUpMirrored:

        case UIImageOrientationDownMirrored:

            transform = CGAffineTransformTranslate(transform, aImage.size.width,0);

            transform = CGAffineTransformScale(transform, -1, 1);

            break;

            

        case UIImageOrientationLeftMirrored:

        case UIImageOrientationRightMirrored:

            transform = CGAffineTransformTranslate(transform, aImage.size.height,0);

            transform = CGAffineTransformScale(transform, -1, 1);

            break;

        default:

            break;

    }

    

    // Now we draw the underlying CGImage into a new context, applying the transform

    // calculated above.

    CGContextRef ctx =CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,

                                            CGImageGetBitsPerComponent(aImage.CGImage),0,

                                            CGImageGetColorSpace(aImage.CGImage),

                                            CGImageGetBitmapInfo(aImage.CGImage));

    CGContextConcatCTM(ctx, transform);

    switch (aImage.imageOrientation) {

        case UIImageOrientationLeft:

        case UIImageOrientationLeftMirrored:

        case UIImageOrientationRight:

        case UIImageOrientationRightMirrored:

            // Grr...

            CGContextDrawImage(ctx,CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage);

            break;

            

        default:

            CGContextDrawImage(ctx,CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage);

            break;

    }

    

    // And now we just create a new UIImage from the drawing context

    CGImageRef cgimg =CGBitmapContextCreateImage(ctx);

    UIImage *img = [UIImage imageWithCGImage:cgimg];

    CGContextRelease(ctx);

    CGImageRelease(cgimg);

    return img;

}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值