在 iOS 中将图像裁剪为正方形
Posted
技术标签:
【中文标题】在 iOS 中将图像裁剪为正方形【英文标题】:Crop an image to a square in iOS 【发布时间】:2015-04-28 19:41:33 【问题描述】:在我的应用程序中,我使用UIImagePickerController
从相机或照片库导入图像。比我将导入的图像保存到应用程序文档目录。这一切都很好,但是我想将裁剪的图像保存为正方形(如在 instagram 上)而不是原始大小。正方形应该是图像宽度或高度的大小(取决于哪个是较小的)。我想也许 CGRect 在这里会很有用,但我不知道如何从图像中裁剪出 CGRect ..我看过无数教程,但似乎没有一个有效,或者它们都太复杂了..
【问题讨论】:
Fit FULL image in 612x612 size for Instagram while keeping ratio的可能重复 【参考方案1】:-(UIImage *)squareImage:(UIImage *)image
if (image.size.width>=image.size.height)
image=[self imageWithImage:image scaledToHeight:100];
else
image=[self imageWithImage:image scaledToWidth:100];
return image;
-(UIImage*)imageWithImage:(UIImage*)sourceImage scaledToWidth:(float)width
float oldWidth = sourceImage.size.width;
float scaleFactor = width / oldWidth;
float newHeight = sourceImage.size.height * scaleFactor;
float newWidth = oldWidth * scaleFactor;
UIGraphicsBeginImageContext(CGSizeMake(newWidth, newWidth));
[sourceImage drawInRect:CGRectMake(0, 0, newWidth, newHeight)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
-(UIImage*)imageWithImage:(UIImage*)sourceImage scaledToHeight:(float)height
float oldHeight = sourceImage.size.height;
float scaleFactor = height / oldHeight;
float newWidth = sourceImage.size.width * scaleFactor;
float newHeight = oldHeight * scaleFactor;
UIGraphicsBeginImageContext(CGSizeMake(newHeight, newHeight));
[sourceImage drawInRect:CGRectMake(0, 0, newWidth, newHeight)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
上述方法将帮助您按比例缩放图像并在正方形中缩放图像..对于旋转,您可以在谷歌上搜索。
【讨论】:
@BalázsVincze 谢谢。如果您发现任何旋转问题,请告诉我。如果你想加快你的任务,我会在我的一些项目中搜索轮换代码。 我已经用这个非常简单的功能解决了旋转问题:-(UIImage *)normalizeImage:(UIImage *)raw if (raw.imageOrientation == UIImageOrientationUp) return raw; else UIImage* flippedImage = [UIImage imageWithCGImage:raw.CGImage scale:raw.scale orientation:-90]; return flippedImage;
@BalázsVincze 哦,太好了。以上是关于在 iOS 中将图像裁剪为正方形的主要内容,如果未能解决你的问题,请参考以下文章