按比例调整 UIImage 大小,然后裁剪



我正在使用此代码来调整用相机拍摄的图像的大小。我按比例将其缩小为缩略图,但随后我想将其裁剪为 60x60 的正方形格式。我尝试合并:

CGImageRef imageRef = CGImageCreateWithImageInRect(CGImage, rect); 

但我没有设法让它正常工作。如何使用核心显卡执行此操作?

- (UIImage *) resizeCapturedImage:(UIImage *) img toWidth:(float) w{
    CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
    CGContextRef ctx = CGBitmapContextCreate(NULL,w,w, 8, 0, colorspace,kCGImageAlphaPremultipliedFirst);
    CGContextDrawImage(ctx, CGRectMake(0, 0, w,img.size.width*w/img.size.height), img.CGImage);
    CGImageRef thumb = CGBitmapContextCreateImage(ctx);
    UIImage *final = [UIImage imageWithCGImage:thumb scale:1.0 orientation:UIImageOrientationRight];
    return final;
}

在这里,我同时放置裁剪和调整图像大小的逻辑,根据您的要求使用它。

对于获取裁剪图像:

UIImage *croppedImg = nil;
CGRect cropRect = CGRectMake(AS YOu Need); // set frame as you need
croppedImg = [self croppIngimageByImageName:self.imageView.image toRect:cropRect];

以下返回UIImage的方法(如您想要图像大小

- (UIImage *)croppIngimageByImageName:(UIImage *)imageToCrop toRect:(CGRect)rect
    {
        //CGRect CropRect = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height+15);
        CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect);
        UIImage *cropped = [UIImage imageWithCGImage:imageRef];
        CGImageRelease(imageRef);
        return cropped;
    }

在这里,您将获得通过上述方法返回的裁剪图像;

或调整大小

并且还使用以下方法对图像的特定高度宽度进行调整:

+ (UIImage*)resizeImage:(UIImage*)image withWidth:(CGFloat)width withHeight:(CGFloat)height
{
    CGSize newSize = CGSizeMake(width, height);
    CGFloat widthRatio = newSize.width/image.size.width;
    CGFloat heightRatio = newSize.height/image.size.height;
    if(widthRatio > heightRatio)
    {
        newSize=CGSizeMake(image.size.width*heightRatio,image.size.height*heightRatio);
    }
    else
    {
        newSize=CGSizeMake(image.size.width*widthRatio,image.size.height*widthRatio);
    }

    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

此方法返回具有所需特定大小的 NewImage

只是想指出,为了性能,最好先裁剪图像,然后调整裁剪部分的大小,而不是调整整个图像的大小,然后裁剪它。 特别是对于较大的图像。

最新更新