学Matplotlib需要拧清的概念之Inches, PPI, DPI先问两个问题,你思考过:
在photoshop中也是如此。 在学习计算机绘图时,经常见到一些概念,如:
像我这样的草根,初期常拧不清它们,并且困惑于:为什么要弄出这么多“差不多”(相似)的概念? 我也很长时间停留在对它们的一知半解上,因为那时也认为,大致知道这此概念就“差不多了”(马马虎虎),我只要能画出图形来即可! 其实理清这些概念很重要,它是输出图像质量、绘图坐标设置、matplotlib一些参数设置等的基础,甚至有时直接决定了你自由操控matplotlib的能力(如坐标变换)。在对它们模糊的时候,使用matplotlib,很多参数设置的目的和产生的结果也就是模糊的。 等我花一些时间理清楚它们后,过去对matplotlib中一些不能理解的地方也豁然开朗了。 本打算把类似上面的一些基础性概念在一篇文章中做个总结,因篇幅的限制,需要分几篇了。 显示器的尺寸绘图过程中,绝大多数时间,我们都是在显示器(本文以液晶显示器为例)上操作、查看图像。 显示器有一个最直接、固定的参数,就是经常说的屏幕尺寸。 屏幕尺寸(物理尺寸),用英寸 inches表示,它是矩形'液晶面板'的对角线长度。比如,17寸显示器,23.1寸显示器...等。 矩形的对角线是23.1 inches,显示器的长、宽是多少呢?这就引入了屏幕比例的概念,如标准的4:3,16:9。 1 英寸 = 2.54 厘米。 我正在用的台式机上的显示器是:23.1英寸,16:9。 用 l 、w 分别表示液晶面板的长和宽,有: 解上面的方程组即可大概地计算出显示器屏幕的长和宽了,单位是厘米。 计算结果是:
我们可以用尺子量一下屏幕显示区的长和宽。更精确的是使用硬件检测软件获取显示器的详细信息,我的显示器检测结果如下: 小结:
在matplotlib中,`display`坐标就是基于这个屏幕构建的坐标,所以用inches或像素标识。 后面会专题讨论matplotlib中的各种坐标系,上面的知识会有助于你的理解。 液晶显示器的”像素“ pixel液晶是一种特殊的有机化合物, 在常温条件下,它呈现出既有液体的流动性,又有晶体的光学各向异性,因而称为“液晶”。 液晶的物理特性是:当通电时,排列变的有秩序,使光线容易通过(看起来就是亮);不通电时排列混乱,阻止光线通过(看起来就是灰暗)。让液晶如闸门般地阻隔或让光线穿透。 液晶层中的液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。在玻璃板与液晶材料之间是透明的电极,电极分为行和列,在行与列的交叉点上,通过改变电压而改变液晶的旋光状态,液晶材料的作用类似于一个个小光阀。这样就可以控制每个像素的亮度和颜色了。 显然,相同尺寸的液晶层上划分的单元格(像素)越多,显示器的显示精度就越高,显示出来的图像就越细腻,但这种显示器的制作工艺难度就会增加,成本也会增加。 显示器就是通过在一个一个单元格(像素)中填充不同的颜色来表达图像的。 像素就是最小的显示单元格,在一个单元格中只能显示相同的颜色。 分辨率,resolution我们在选购显示器时,非常关注的”分辨率“参数,它就与”像素“有关。像素常用字母PX表示。 分辨率,又称解析度、解像度。即显示屏幕区域被分解为多少个像素(单元格)。 虽然在系统中有设置显示器分辨的地方,但液晶显示器的最大分辨率在出厂后就是固定的了。能设置的仅是当前分辨率。下图是windows 10 系统设置显示分辨率的界面。 我的显示器最大分辨率是 1920*1080,即长向上有1920个PX,宽向上有1080PX 总的有 2073600 个像素,它就是我的显示的分辨率了。这个数字太大,不好理解,所以一般直接用类似 1920PX * 1080PX这样的形式来表示屏幕的分辨率,手机屏幕也是如此。 题外话:液晶面板的单元格划分在出厂时就固定了,为什么还能设置当前分辨率呢? 假如我将当前分辨率调整为1280px*960px,按照定义,长向就是1280个像素,宽向就是960个像素。其实并不是你改变了显示器分辨率,而是操作系统欺骗了你。操作系统通过一系列运算将1920*1080个单元格矩阵变换为1280*960个模拟像素矩阵呈现给你。所以,就有了当前分辨率和最大分辨。 PPI 是什么?基于分辨率的含义,人们还用每英寸长度上像素个数来表示屏幕分辨率,即 Pixels per inches,缩写为 PPI。 我的显示器长向上最大为1920像素,物理长度是51厘米(折合20.078英寸),每英寸长度上有1920 px / 20.078 inches ≈ 96 PPI。 所以,有时又说我的显示器分辨率是 96 PPI。 也有人把他说成 96 DPI,这是不严格的。对于显示器分辨率,严格来说应该用 96 PPI。当然你很清楚它们的含义时,反而混用也没有关系了。 DPI 又是什么?DPI 是 Dots per inches的缩写。DPI是一个与打印机、印刷紧密相关的概念。 打印机是通过一个一个的墨点来打印图像的,每个墨点的色彩只能是一样的,打印机在每英寸上可打印的点数就是DPI。显然DPI越大,打印出来的图像就越细腻。所以,常用DPI作为打印机的分辨率来表示打印机的最大可打印质量。 为什么说是最大可打印质量呢?即这台打印机最大打印分辨率,但实际打印分辨率还与图像的分辨率有关。 一般打印机的分辨在150-300DPI,高的能达到600DPI。 我们用100%的比例打印图像:
总结:严格来说:
它们对matplotlib来说很重要。 |
|
来自: 星光闪亮图书馆 > 《Python学习》