来自UIImageView的图像裁剪

时间:2015-11-05 09:38:03

标签: ios objective-c iphone image uiimageview

我有UIImageView大小(0,0,414,471)。大小为(0,0,1236,1242)的图像在UIViewContentModeScaleAspectFit中以UIImageView模式显示。因此图像很好地显示。然后我在图像上制作一个矩形(0,0,100,100),我喜欢裁剪它。即使UIImageView上覆盖的矩形(100,100),实际图像尺寸(100,100)也不会覆盖UIImageView上显示的尺寸。所以我制作了xratio(实际宽度/显示宽度)和yratio(实际高度/显示高度),然后我将矩形大小乘以矩形的所有x,y,宽度和高度。这种方法看起来像UIImageView所示,可以尽可能地裁剪区域。但仍然有一点区域偏移和失真。在这种情况下,最好的裁剪方法是什么? 我的代码如下所示

- (void)saveCroppedImage:(UIImage *)image withcroppedRectangle:(CGRect)clippedRect
{
    float xratio = image.size.width/displayWidth;
    float yratio = image.size.height/displayHeight;
    // Crop logic
    clippedRect.origin.x *= xratio;
    clippedRect.origin.y *= yratio;
    clippedRect.size.width *= xratio;
    clippedRect.size.height *= yratio;

    CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], clippedRect);
    UIImage * croppedImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    NSString *imageName =@"Documents/";
    imageName = [imageName stringByAppendingString:[CurrentToddlerProfile getUserID]];
    imageName = [imageName stringByAppendingString:@".png"];
    NSString  *pngPath = [NSHomeDirectory() stringByAppendingPathComponent:imageName];
    // Write image to PNG
    [UIImagePNGRepresentation(croppedImage) writeToFile:pngPath atomically:YES];
    // Create file manager
//    NSFileManager *fileMgr = [NSFileManager defaultManager];
//    NSError *error;
//    // Point to Document directory
//    NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
//    // Write out the contents of home directory to console
//    NSLog(@"Documents directory: %@", [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]);

}

1 个答案:

答案 0 :(得分:1)

您确定需要两个比率吗?如果您希望图像具有正确的比例,则应仅使用一个比例。

如果你需要填充一个矩形(即使UIImageView为你做了),那么首先计算x轴上的比率。使用此比率计算缩放高度,如果它小于您需要覆盖的高度,则计算y轴上的比率。

最后,刚刚计算的比率是用于缩放图像的比率。