如何裁剪图像并从原始图像设置其裁剪范围

Posted

技术标签:

【中文标题】如何裁剪图像并从原始图像设置其裁剪范围【英文标题】:How to crop an image and set its cropping bounds from the original image 【发布时间】:2013-09-13 08:42:41 【问题描述】:

我有一个大小为全屏的UIImageView *userImage 和一个大小为320x320 的UIImageView *imageSquare。用户将能够使用userImage 将其变大、改变位置等。imageSquare 是静态的,应该被视为裁剪视图

下面的代码可以将userImage 裁剪为imageSquare.frame.size。我的问题是它从userImage 的顶部而不是从imageSquare.frame.origin 进行裁剪,这意味着我需要从X 和Y 坐标裁剪它。这是我第一次尝试这样做,到目前为止我尝试过的每件事都无法从imageSquare.frame.origin 中裁剪出来。

如何从imageSquare.frame.origin 裁剪userImage 的当前视图(用户正在操作的视图)?

CGSize pageSize = imageSquare.frame.size;

    UIGraphicsBeginImageContext(pageSize);

    CGContextRef resizedContext = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(resizedContext, userImage.frame.origin.x, userImage.frame.origin.y);

    [userImage.layer renderInContext:resizedContext];
    image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    if (image != nil) 
        NSLog(@"is not nil");
        NSData *imgData = UIImagePNGRepresentation(image);
        imageSquare.image = [[UIImage alloc]initWithData:imgData];

    

【问题讨论】:

【参考方案1】:

你需要翻译成否定xy

CGContextTranslateCTM(resizedContext,
                      -userImage.frame.origin.x,
                      -userImage.frame.origin.y);
[userImage.layer renderInContext:resizedContext];

【讨论】:

以上是关于如何裁剪图像并从原始图像设置其裁剪范围的主要内容,如果未能解决你的问题,请参考以下文章

在 WooCommerce 中禁用原始图像裁剪

我只想将裁剪后的图像保存到图库中。但它保存了原始的完整图像。如何只保存裁剪的图像?

Android 裁剪图像大小

如何获取裁剪图像相对于原始图像的坐标?

如何使用原始文件名保存裁剪的图像?

捕获和裁剪图像并保存裁剪的图像