在 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 中将图像裁剪为正方形的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中将图像裁剪为正方形,而不是调整为相同的纵横比

如何在iOS中将方形图像屏蔽为圆角图像?

使用 CGImageCreateWithImageInRect 裁剪图像

在Android中以给定的正方形大小裁剪图像?

将图像裁剪为正方形,然后使用纯 CSS 进行圆形?

试图将我的 UIImage 裁剪为 1:1 的纵横比(正方形),但它不断放大图像,导致图像模糊。为啥?