首先,明确DPI和PPI概念
PPI和DPI是分辨率,resolution。
- PPI用于显示器,一个像素一个格子,“每英寸像素”,表示一行一英寸长有几个格子。
- DPI用于打印机,“每英寸墨点”。(DPI事实上也用于显示器,例如Python图片用dpi设置,显示器一点对一像素,所以对于显示器来说 1 ppi = 1 dpi。我们不讨论这种情况。)
1 英寸=2.54 厘米
我们先说电脑。PPI有三个层次:PPI
- 显示器PPI。电脑的显示屏可物理地视为围棋棋盘,其PPI是出厂固定的,这是硬件,不可改变,比如某显示器的一格(一个pixel)边长11¼ μm。PPI
- 操作系统PPI。操作系统可以将显示器设成自己的分辨率,例如1024*1024,800*600,这是棋盘格的宽width高height,作为用户,对我们的视觉有影响的是这个分辨率。PPI
- 图片PPI。电脑的图片我们可以看到(以Mac为例)“尺寸”,
简言之,
图片分辨率=图片PPI,图片尺寸=width(in pixels)*height(in pixels)=[图片PPI*宽(in inches)]*[图片PPI*高(in inches)],图片体积=图片尺寸*4*压缩比,或图片体积粗略地正比于图片尺寸。
还有一张图清晰的标明dpi和ppi的区别

手工数,图中显示器的一格,打印机是6*6格,即从一行看,打印机dpi值=6 * 电脑ppi值,假如一幅图在电脑中是72ppi,那么为了打印效果好(每个墨点有独立数据),打印机得72*6=432dpi
DPI 和 PPI 经常混用。因为很多行业将“Dot”泛指为所有的图像基本单元。多数情况下,DPI=PPI。
首先查看官方文档
figsize:2-tuple of floats, default: rcParams["figure.figsize"] (default: [6.4, 4.8])
Figure dimension (width, height) in inches.
dpi:float, default: rcParams["figure.dpi"] (default: 100.0)
Dots per inch.
上边我们能知道,默认每英尺是100dpi,而figsize则是传递宽几英尺,高几英尺
示例
def show_images(img, num_rows, num_cols, scale=2):
figsize = (num_cols * scale, num_rows * scale)
# 这里假如num_cols=5 num_rows=2 scale=2
# 结果应该是,
# 宽:10英尺
# 高:4英尺
# 得到的图片像素应该是:10*100=1000 4*100=400
# 1000*400
_, axes = plt.subplots(num_rows, num_cols, figsize=figsize)
for i in range(num_rows):
for j in range(num_cols):
axes[i][j].imshow(img[i * num_cols + j])
axes[i][j].axes.get_xaxis().set_visible(False)
axes[i][j].axes.get_yaxis().set_visible(False)
plt.show()
return _, axes
输出如下图

def show_images(img, num_rows, num_cols, scale=2):
figsize = (num_cols * scale, num_rows * scale)
# 这里假如num_cols=5 num_rows=2 scale=10
# 结果应该是,
# 宽:50英尺
# 高:20英尺
# 得到的图片像素应该是:50*100=5000 20*100=2000
# 5000*2000
_, axes = plt.subplots(num_rows, num_cols, figsize=figsize)
for i in range(num_rows):
for j in range(num_cols):
axes[i][j].imshow(img[i * num_cols + j])
axes[i][j].axes.get_xaxis().set_visible(False)
axes[i][j].axes.get_yaxis().set_visible(False)
plt.show()
return _, axes

参考
DPI 和 PPI 的区别是什么? - maggie的回答 - 知乎
(https://www.zhihu.com/question/23770739/answer/197358761)