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:以像素为单位获取显示的图像大小的主要内容,如果未能解决你的问题,请参考以下文章

Android 背景图像大小(以像素为单位)

如何使用 PHP 和 GD 获取图像资源大小(以字节为单位)?

使用 JavaScript 获取 CSS 背景图像的大小?

php如何获取以kb为单位的网络图像大小?

QML 以像素为单位获取默认字体高度值

从桌面到移动的画布图像不同大小(以像素为单位)