物理、逻辑与位图像素的概念

关于设备物理像素和逻辑像素,这两个像素一个是实体的,一个是抽象的单位。除此之外还有一个不可忽视的像素,就是位图像素。

  • 物理像素(设备像素):指的是设备屏幕实际拥有的像素点。一个设备生产出来,它的像素就已经确定了,iphone6的分辨率是375px * 667px。

  • 逻辑像素(CSS像素):是我们进行CSS样式设计时的一种抽象单位,它可以自动在不同设备之间调节。

    设备像素比 = 设备的物理像素 / CSS像素

    如果设备像素比为2,就意味着设置的 1px CSS 像素,在设备上实际使用了2个物理像素单元来进行渲染,所以实际看到的一定会比 1px 粗一些。

  • 位图像素:一般我们在页面上使用的图片都是位图,位图像素是位图最小单位,不可再拆分。位图像素是图片本身的特性,在图片产出时就已经确定了,和 CSS 像素以及设备像素没有任何关系。

问题:图片在Retina下却变模糊

以 IPhone6 为例,IPhone6 手机的尺寸为 375px * 667px,如果我们在 PC(非 Retina 屏)上制作出一个宽度为 375px 的图片,该图片在电脑上显示正常,但在手机上显示就模糊了。

分辨率越高,图片显示不应该越清晰吗,为什么图片反而变得模糊了呢? 这个问题需要从以下几个方面来解释:

  • 像素是显示的最小单位,不可拆分;

  • 由于设备像素比的原因,CSS 的 1px 或位图的 1px 不一定等于物理像素的 1px。

前面我们提到过:设备像素比的意义在于规定设备以多少个物理像素来显示 1px 的 CSS 像素。该结论对于位图一样适用:设备与位图的像素比规定了设备以多少个物理像素来显示 1px 的位图像素。

举个例子:

  如果我们在设备1上看这张图片,将会以 375 * 200 = 75000 个物理像素来显示,因此图片的清晰度不变。但如果我们在设备2上预览这张图片,将会以 375 * 200 *4 = 300000 个物理像素来显示这张图片。其用来显示图片的物理像素个数为图片像素的 4 倍,而图片实际上只有 75000 个有效像素。

  因为像素是最基本的单位,无法再进行拆分,所以剩下的 300000 - 75000 = 225000 个物理像素将采用填充的方法来显示图片。所谓填充,就是就近取色,这也是造成图片模糊的原因。

解决方案:使位图像素和设备像素的数目接近

现在我们就能来回答,为什么在移动设备开发者经常使用到@2x、@3x的图片了。

  前面已经知道,造成图片模糊的原因是位图的像素总数和对应的物理像素个数不一致,那么只需要增加图片的位图像素数目,使其接近于设备物理像素就解决了这个问题。 因此,要想完美的适配多种设备,就需要针对不同设备采用 @2x 或者 @3x 的图片,使图片的位图像素和设备位图像素的数目接近于 1:1,就能使图片清晰显示不模糊。

移动端开发为什么使用@2x@3x图片的更多相关文章

  1. python Image resize 对iOS图片素材进行2X,3X处理

    通常在iOS上开发使用的图片素材1x,2x,3x三种 下面利用python Image 库 resize函数,由一个大图,自动生成1x,2x,3x的素材照片: 1. 首先你的python环境要安装有I ...

  2. iOS开发 2x 3x图

    众所周知,iOS开发中的图片资源一般需要2倍图和3倍图,也就是2x,3x,但是最近思考了一个问题,为什么不能只提供3x的图片,2x的图片让系统从3x压缩就好了,于是上网搜索了下,得到了答案. 当我们在 ...

  3. 原生js开发,无依赖、轻量级的现代浏览器图片懒加载插件,适合在移动端开发使用

    优势 1.原生js开发,不依赖任何框架或库 2.支持将各种宽高不一致的图片,自动剪切成默认图片的宽高 比如说你的默认图片是一张正方形的图片,则各种宽度高度不一样的图片,自动剪切成正方形. 完美解决移动 ...

  4. 图片背景2X && 3X

    图片背景2X && 3X @media (-webkit-min-device-pixel-ratio: 3),(min-device-pixel-ratio: 3){ .share_ ...

  5. 自动由@3x图片生成@2x和@1x的图片 - Xcode插件

    原文:http://www.cocoachina.com/bbs/read.php?tid=277187 生成@3x图片对应的@2x和@1x版本--RTImageAssets 关键字:Xcode插件, ...

  6. 29.html5 移动端开发总结

    手机与浏览器 浏览器: 移动端开发主要针对手机,ipad等移动设备,随着地铁里的低头族越来越多,移动端开发在前端的开发任务中站的比重也越来越大.各种品牌及尺寸的手机也不尽相同.尺寸不同就算了分辨率,视 ...

  7. html5 移动端开发

    移动端开发总结     目录 1.手机与浏览器 2.Viewport(视窗) 3. 媒体查询 4.px,em,rem,pt 5.设备像素比devicePixelRatio 6.移动web中的图标及字体 ...

  8. iOS 2x 3x

    iOS中: 备注: Retina是一种显示技术,可以将把更多的像素点压缩至一块屏幕里,从而达到更高的分辨率并提高屏幕显示的细腻程度.而其最初该技术是用于苹果的iPhone4上.其屏幕分辨率为960×6 ...

  9. web移动端开发技巧与注意事项汇总

    一.meta的使用 1.<meta name="viewport" content="width=device-width,initial-scale=1.0, m ...

随机推荐

  1. java实现多线程生产者消费者模式

    1.概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消 ...

  2. Entity Framework Core的坑,Select后再对导航属性进行查询或Select前进行Skip/Take

    把asp.net core的项目发布到ubuntu上了,运行的时候出现了如下警告: warn: Microsoft.EntityFrameworkCore.Query[20500] The LINQ ...

  3. vue 中 使用 element-ui 发送请求前 校验全部表单,报警告: [Element Warn][Form]model is required for validate to work!

    WEB先生 2020-07-14 20:01:45  754  收藏 分类专栏: vue 文章标签: vue js 版权 报这种错可能有以下两种情况 1.属性绑定错误,确保绑定的是  :model  ...

  4. 直播流媒体EasyDSS

    访问官方 http://www.easydss.com/ 点击试用下载 根据不同需求 选择不同版本 (我选择的右边) 下载完解压 双击 start.bat 看见如下图则成功 网页输入 http://i ...

  5. 有个姑娘叫history

    文章目录 常用参数 history的一些用法 修改history命令默认保存的数量 来给history穿衣服 让我们重新认识一下history history命令用于显示用户以前执行过的历史命令,并且 ...

  6. kube-scheduler源码分析(1)-初始化与启动分析

    kube-scheduler源码分析(1)-初始化与启动分析 kube-scheduler简介 kube-scheduler组件是kubernetes中的核心组件之一,主要负责pod资源对象的调度工作 ...

  7. Redis小秘密

    Redis小秘密 临渊羡鱼,不如退而织网. 一.Redis基本数据类型 想必很多人都能脱口而出String.List.Hash.Sorted Set和Set五种基本数据类型. 以及五大基本数据类型简要 ...

  8. Spring AOP基础概念及自定义注解式AOP初体验

    对AOP的理解开始是抽象的,看到切点的匹配方式其实与正则表达式性质大致一样就基本了解AOP是基本是个什么作用了.只是整个概念更抽象,需要具化理解.下图列表是AOP相关概念解释,可能也比较抽象^_^ 比 ...

  9. 为什么使用Mybatis对JDBC进行包装探究

    一.原生JDBC在实际生产中使用存在的影响性能的问题 首先分析使用JDBC的代码: Connection connection = null; PreparedStatement preparedSt ...

  10. 【一天一个小知识10/20】Unity安卓获取麦克风并录音保存。

    2021-10-20 10:42:16 #region 模块信息 // **************************************************************** ...