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