在 iOS 7+ 中将照片大小调整为 5 英寸高 x 4.5 英寸宽

Posted

技术标签:

【中文标题】在 iOS 7+ 中将照片大小调整为 5 英寸高 x 4.5 英寸宽【英文标题】:Rsize photo to 5" height by 4.5" width in iOS 7+ 【发布时间】:2013-10-14 05:16:45 【问题描述】:

我正在开发 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;

使用上面的代码我得到this result

现在,如果我使用代码没有考虑添加 UILabels 以自定义如下

-(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;

,然后我得到this image

我的用户界面层次结构

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

【问题讨论】:

【参考方案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;

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

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

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

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

因此,如果您将图像缩放为1630 * 1458,那么您将获得5"" * 4.5" 的图像。为此,您必须在上述方法中传递CGSize newSize = CGSizeMake(1630.0, 1458.0);

【讨论】:

感谢 Vin 的解决方案和很好的解释。我真的很感谢你的解释。我会检查这个并让你知道。 如果你能看到我正在使用[self.containerView.layer renderInContext:UIGraphicsGetCurrentContext()];,这样我就可以结合 UIImage 上添加的图像和标签。如果我遵循您的解决方案,我无法正确获得输出。你能告诉我出了什么问题吗?请看看我的更新。谢谢 @iOSAppDev:你面临的问题是什么?你没有得到什么?为什么不能直接使用我的代码? 我会在接下来的几分钟内添加图片的截图......这样你就会明白出了什么问题 感谢您的帮助和支持。我会试试这个,如果我遇到问题,我会问一个新问题。非常感谢您的帮助:)

以上是关于在 iOS 7+ 中将照片大小调整为 5 英寸高 x 4.5 英寸宽的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 内的 UIView 未在 3,5 英寸屏幕 iOS 上调整大小

5寸,7寸,10寸照片的大小

4.4 和 5.5 英寸的 UICollectionViewCell 动态调整大小

ViewControllers 不为 3.5 英寸屏幕调整大小

自动调整大小不适用于 xib 文件中的视图内容

列印5寸,6寸,7寸的照片分别是多大的相纸?