0

我正在开发 iphone 应用程序,用户可以通过在其中添加文本来添加自定义照片。现在我需要在 iOS7 中将这张照片转换为 5" 高 x 4.5" 宽。

我正在拍摄如下视图的屏幕截图,以组合添加到其中的照片和标签,如下所示

-(UIImage*)customizedImageMain
{
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
        UIGraphicsBeginImageContextWithOptions(self.containerView.bounds.size, NO, [UIScreen mainScreen].scale);
    else
        UIGraphicsBeginImageContext(self.containerView.bounds.size);
    [self.containerView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return finalImage;
}

我用 4" 屏幕检查了来自 iPod touch 的图像。我从上面的代码中得到的图像尺寸接近 4.445" 宽度和 7.889" 高度。

现在,无论应用程序在哪个设备上运行,我如何将这个图像调整为精确的 5" 高度和 4.5" 宽度?

提前致谢。

根据 Vin 的解决方案更新代码

-(UIImage*)customizedImageFirst
{
    // We want 5" * 4.5" image which can be represented as 1630 * 1458
    // 1630 pixels = 5 inch * (326 pixels / 1 inch)
    // 1458 pixels = 4.5 inch * (326 pixels / 1 inch) in terms of pixels.
    CGSize requiredImageSize = CGSizeMake(1458.0,1630.0);
    UIGraphicsBeginImageContext(requiredImageSize);
    [self.containerView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *combinedImage = UIGraphicsGetImageFromCurrentImageContext();
    [combinedImage drawInRect:CGRectMake(0,0,requiredImageSize.width,requiredImageSize.height)];
    UIImage* finalImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return finalImage;
}

使用上面的代码我得到了这个结果

现在,如果我使用代码而不考虑添加到自定义的 UILabel,如下所示

-(UIImage*)customizedImageSecond  // If I use your code
{
    // We want 5" * 4.5" image which can be represented as 1630 * 1458
    // 1630 pixels = 5 inch * (326 pixels / 1 inch)
    // 1458 pixels = 4.5 inch * (326 pixels / 1 inch) in terms of pixels.
    CGSize requiredImageSize = CGSizeMake(1458.0,1630.0);
    UIGraphicsBeginImageContext(requiredImageSize);
    [self.myImageView.image drawInRect:CGRectMake(0,0,requiredImageSize.width,requiredImageSize.height)];
    UIImage* finalImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return finalImage;
}

,然后我得到这张图片

我的 UI 层次结构

UIViewController 的主视图。我在主视图中添加了另一个 UIView (containerView)。在这个 containerView 中,我添加了我的 UIImageView 和 UILabels。因此,获取带有标签的自定义图像,我正在截取 containerView 的屏幕截图。

4

1 回答 1

1

这是我通常用来将图像缩放到所需大小的自定义方法。此方法将newSize( For Eg : CGSize newSize = CGSizeMake(30.0, 30.0); ) 作为参数之一。这里,30.0是以像素为单位的值。

+(UIImage*)imageWithImage:(UIImage*)image
              scaledToSize:(CGSize)newSize
{
    UIGraphicsBeginImageContext( newSize );
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

因此,您可以使用上述方法以像素为单位缩放图像。但是您想以英寸为单位缩放图像。显示设备可以显示的像素数量有限,显示像素的空间也有限。

像素密度是衡量设备分辨率的指标,可以用PPI(每英寸像素数)PPCM(每厘米像素数)来计算。

在您的情况下,您需要5" * 4.5"的图像,它可以用1630 * 1458 (1630 pixels = 5 inch * (326 pixels / 1 inch), 1458 pixels = 4.5 inch * (326 pixels / 1 inch))像素表示。

注意:第 4 代以上的 Apple iPhone 和 iPod Touch 的 PPI 326

所以,如果你用大小缩放图像,1630 * 1458那么你会得到5"" * 4.5". 为此,您必须通过CGSize newSize = CGSizeMake(1630.0, 1458.0);上述方法。

于 2013-10-14T08:02:36.070 回答