iOS中图片的size和图片像素的关系

主题

iOS中图片的size和图片像素的关系

正文

最近在做拍照搜题的一个功能,需要接入阿里的切图接口和图片识别文字接口。这里附上阿里的接口文档链接阿里试卷切题接口

通过这个文档发现阿里对上传的图片尺寸有要求,要求如下:

在这里插入图片描述

强调了必须小于8192像素。刚开始以为直接判断UIImage的size,如果宽和高有大于8192的话,做下处理就行了。结果发现不是这样的。UIImage的size的width和height和像素的转换是和手机分辨率有关系的。

例如图片的width是1000,在2倍屏的手机上,他的宽度的像素就是2000,3倍屏的手机上他的宽度的像素就是3000。所以判断图片的像素是否超过某个值,需要乘上设备的scale值。

最开始我是通过UIScreen.main.scale 来获取设备是几倍屏的。后来发现UIImage有个更好用的属性,就是scale属性。通过这个属性可以知道UIImage最新状态下像素和size的关系。

例如我在3倍屏手机上像素超过了8192像素,那么我可以通过Core Graphics的相关方法改变图片的scale,从而减小图片的像素。

比如我的图片的size是3000 X 3000 ,那么在3倍屏的手机上他的像素就是9000 X 9000 pixel。超过了接口规定的值。这里我就可以通过如下方法将图片的scale变为2,从而让图片的像素变为 6000 X 6000 pixel。从而满足接口的相关要求,代码如下:

func changeSizeAndScale(size: CGSize, scale: CGFloat = UIScreen.main.scale) -> UIImage? {
        UIGraphicsBeginImageContextWithOptions(size, false, scale)
        defer {
            UIGraphicsEndImageContext()
        }
        let rect = CGRect(x: 0.0, y: 0.0, width: size.width, height: size.height)
        draw(in: rect)
        let output = UIGraphicsGetImageFromCurrentImageContext()
        return output
 }

size传图片本身的size,scale传2。则在不改变图片size的情况下,缩小了图片的像素,满足了接口的要求。

总结

以前对图片的size和像素了解的比较少,这里整理下他们的关系,可以用个公式表示如下:

image.size.width  *  image.scale = image.像素.width
image.size.height  *  image.scale = image.像素.height
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值