在 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 上调整大小
4.4 和 5.5 英寸的 UICollectionViewCell 动态调整大小