FigSize产生的图像分辨率


首先,明确DPI和PPI概念

PPI和DPI是分辨率,resolution。

  • PPI用于显示器,一个像素一个格子,“每英寸像素”,表示一行一英寸长有几个格子。
  • DPI用于打印机,“每英寸墨点”。(DPI事实上也用于显示器,例如Python图片用dpi设置,显示器一点对一像素,所以对于显示器来说 1 ppi = 1 dpi。我们不讨论这种情况。)

1 英寸=2.54 厘米

我们先说电脑。PPI有三个层次:PPI

  1. 显示器PPI。电脑的显示屏可物理地视为围棋棋盘,其PPI是出厂固定的,这是硬件,不可改变,比如某显示器的一格(一个pixel)边长11¼ μm。PPI
  2. 操作系统PPI。操作系统可以将显示器设成自己的分辨率,例如1024*1024,800*600,这是棋盘格的宽width高height,作为用户,对我们的视觉有影响的是这个分辨率。PPI
  3. 图片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)

(https://matplotlib.org/stable/api/figure_api.html?highlight=subplots#matplotlib.figure.Figure.subplots)


文章作者: Jelly
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jelly !
  目录