iOS:以像素为单位获取显示的图像大小
Posted
技术标签:
【中文标题】iOS:以像素为单位获取显示的图像大小【英文标题】:iOS: Get displayed image size in pixels 【发布时间】:2016-06-21 04:22:00 【问题描述】:在我的应用程序中,我正在显示资源库中的矩形图像。图像为 100x100 像素。我只为这个资产使用了 1x 插槽。
我想以 300x300 像素显示此图像。使用点执行此操作非常简单,但我不知道如何让 UIImageView 以像素为单位设置大小。
或者,如果我无法设置以像素为单位显示的大小,我想获得正在显示的图像的以像素为单位的大小。
我尝试在 UIImageView 和 UIImage 实例上使用 .scale
,但它始终为 1。即使我已将约束设置为 150 和 300。
【问题讨论】:
你想做什么?更改 ImageView 以适应图像大小?缩放图像以修复图像视图或显示图像但根本不缩放? 以精确的像素大小显示图像将是最佳选择。因此,如果图像是 100 像素 x 100 像素,则显示该尺寸 设置 UIImageView 为 image.size.height;图像.大小.宽度;我还没有尝试,但也许你会做一些类似 UIImageView.frame.size.width = image.size.width/[UIScreen mainSreen].scale; 试过了,但是 .size 函数都使用点而不是像素。此外,比例始终为 1,不知道为什么。使用 100x100 像素的图像,将视图的约束设置为 150x150 并将其放大,但报告 .scale 为 1 和 .size 为 100。 【参考方案1】:获取UIImageView
的像素大小:
let widthInPixels = imageView.frame.width * UIScreen.mainScreen().scale
let heightInPixels = imageView.frame.height * UIScreen.mainScreen().scale
获取UIImage
的像素大小:
let widthInPixels = image.size.width * image.scale
let heightInPixels = image.size.height * image.scale
【讨论】:
每张图片都返回 1.0 的比例,就好像所有图片都是正方形一样。知道为什么吗? 您不需要将图像大小乘以图像比例,因为比例是 1.0,所以值将相同。 查看文档以了解scale
是什么。 developer.apple.com/documentation/uikit/uiimage/1624110-scale。当然并不总是 1.0..
在 Swift 5 中,使用UIScreen.main.scale
。【参考方案2】:
斯威夫特 5
看看here
// This extension to save ImageView as UImage
extension UIView
func asImage() -> UIImage
let renderer = UIGraphicsImageRenderer(bounds: bounds)
return renderer.image rendererContext in
layer.render(in: rendererContext.cgContext)
// this extension to resize image
extension UIImage
func resizeImage(targetSize: CGSize) -> UIImage
let size = self.size
let widthRatio = targetSize.width / size.width
let heightRatio = targetSize.height / size.height
let newSize = widthRatio > heightRatio ? CGSize(width: size.width * heightRatio, height: size.height * heightRatio) : CGSize(width: size.width * widthRatio, height: size.height * widthRatio)
let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)
UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0)
self.draw(in: rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
// This extension will display image with 300X300 pixels
extension UIImage
func Size300X300() -> UIImage?
let imageView = UIImageView()
imageView.contentMode = .scaleAspectFit
imageView.frame = CGRect(x: 0, y: 0, width: 300, height: 300)
let image = imageView.asImage()
let newImage = image.resizeImage(targetSize: CGSize(width:300, height: 300))
return newImage
let image = YOURIMAGE.Size300X300() imageView.image = image!
【讨论】:
有什么办法让我也可以保持图像的大小吗?实际上贴纸大小超过 100 KB。 嘿,请更新您的 sizes300x300 函数,因为它不使用任何图像总是返回空白,您需要添加 imageView.image = self。请验证并更新您的答案。谢谢! asImage 功能对我帮助很大,非常感谢!以上是关于iOS:以像素为单位获取显示的图像大小的主要内容,如果未能解决你的问题,请参考以下文章