2012-02-03 62 views
1

我正在创建具有不同大小缩略图的图像库。我想将这些矩形缩略图转换为方形大小,以使它们的大小看起来都相似。我不介意从扩展部分中裁剪它,但我不知道如何去做。谁能帮帮我吗?使用目标将矩形图像转换为方形图像c

感谢
潘卡

+0

这将有助于 - http://stackoverflow.com/questions/4789067/iphone-mask-uiimageview-of-differing-dimensions-into-square-dimension – 2012-02-03 09:17:53

+0

实际上并不*创建*缩略图,只是使它看起来像一个... – 2012-02-03 09:19:16

回答

5

您需要使用图像中的矩形方法通过图像和所需的边界在...

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

我已经加入这个一个UIImage类(UIImage的+你可以下载源代码 - Categories example

+0

谢谢西蒙,你的代码帮助我解决了我的问题 – pankaj 2012-02-03 09:48:38

0

那么,如果你使用UIImageView来显示你的图像(至少我确信你可以),你可以将其设置为contentMode财产至UIViewContentModeScaleAspectFill。这应该“裁​​剪”你的图像到你的UIImageView的边界。如果您的图片将超出UIImageView的边界,请确保clipsToBounds也设置为YES

让我知道是否有帮助。

+0

这实际上并不*创建*缩略图,只是使它看起来像一个... – 2012-02-03 09:19:23

+0

我同意。这是'简单'的出路:P – 2012-02-03 10:10:51

0

我正在使用下一个方法。输入是要缩放的UIImage以及UIImage所在的UIImageView的框架的大小。它在框架的高度和宽度相等时起作用。

一件重要的事情:我保持图像的比例。我不扩大图像覆盖整个广场。如果你想这样做,你必须改变'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; 
}