使用目标c将矩形图像转换为方形图像

时间:2012-02-03 09:11:49

标签: iphone objective-c ios uiimageview

我正致力于创建一个包含不同尺寸缩略图的图库。我想将这些矩形缩略图转换为方形大小,以便所有这些缩略图的大小都相似。我不介意从扩展部分裁剪它但我不知道该怎么做。有人可以帮帮我吗?

感谢
的Pankaj

3 个答案:

答案 0 :(得分:5)

您需要在rect方法中使用图像传入图像和所需的边界...

CGImageRef imageRef = CGImageCreateWithImageInRect([anImage CGImage], requiredBounds);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);

我已将此添加到UIImage类别(UIImage + Resize)中,您也可以下载源代码 - Categories example

答案 1 :(得分:0)

如果您使用UIImageView来显示图片(我更确定您这样做),您可以将contentMode属性设置为UIViewContentModeScaleAspectFill。这应该将您的图像“裁剪”到UIImageView的边界。如果您的图片超出UIImageView的边界,请确保clipsToBounds也设置为YES

如果有帮助,请告诉我。

答案 2 :(得分:0)

我正在使用下一个方法。输入是UIImage的比例尺和UIImage的UIImage框架的大小。当框架的高度和宽度相等时,它可以工作。

重要的一点:我保持图片的比例。我没有扩大图像以覆盖整个正方形。如果你想这样做,你必须改变'drawInRect' [self drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];的行并删除if-else。

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {

    CGFloat scaleRatio;

    if (image.size.width > image.size.height) {

        scaleRatio = image.size.height/image.size.width;

    }else{

        scaleRatio = image.size.width/image.size.height;
    }

    CGAffineTransform scaleTransform = CGAffineTransformMakeScale(scaleRatio, scaleRatio);

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextConcatCTM(context, scaleTransform);

    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0);

    if (image.size.width > image.size.height) {

        [image drawInRect:CGRectMake(0, (newSize.height/2)-(newSize.height*scaleRatio/2), newSize.width, newSize.height*scaleRatio)];

    }else{

        [image drawInRect:CGRectMake((newSize.width/2)-(newSize.width*scaleRatio/2), 0, newSize.width*scaleRatio, newSize.height)];
    }

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}