以像素为单位指定并保存大小正确的图形

假设我的图像尺寸为3841 x 7195像素。我想将图形的内容保存到磁盘上,以得到我指定的确切大小(以像素为单位)的图像。


没有轴,没有标题。只是图像。我个人并不关心DPI,因为我只想指定图像在磁盘中以像素为单位在屏幕上所占的大小。


我读过其他 线程,它们似乎都转换为英寸,然后以英寸为单位指定图形尺寸并以某种方式调整dpi。我想避免处理像素到英寸转换可能导致的精度损失。


我尝试过:


w = 7195

h = 3841

fig = plt.figure(frameon=False)

fig.set_size_inches(w,h)

ax = plt.Axes(fig, [0., 0., 1., 1.])

ax.set_axis_off()

fig.add_axes(ax)

ax.imshow(im_np, aspect='normal')

fig.savefig(some_path, dpi=1)

没有运气(Python抱怨宽度和高度都必须低于32768(?))


从我所看到的一切来看,matplotlib需要在inches和中指定图形大小dpi,但是我只对图形在磁盘中占据的像素感兴趣。我怎样才能做到这一点?


需要说明的是:我正在寻找一种使用matplotlib而不是其他图像保存库的方法。


宝慕林4294392
浏览 1362回答 3
3回答

猛跑小猪

根据tiago接受的响应,这是一个小型通用函数,该函数将numpy数组导出到与该数组具有相同分辨率的图像:import matplotlib.pyplot as pltimport numpy as npdef export_figure_matplotlib(arr, f_name, dpi=200, resize_fact=1, plt_show=False):    """    Export array as figure in original resolution    :param arr: array of image to save in original resolution    :param f_name: name of file where to save figure    :param resize_fact: resize facter wrt shape of arr, in (0, np.infty)    :param dpi: dpi of your screen    :param plt_show: show plot or not    """    fig = plt.figure(frameon=False)    fig.set_size_inches(arr.shape[1]/dpi, arr.shape[0]/dpi)    ax = plt.Axes(fig, [0., 0., 1., 1.])    ax.set_axis_off()    fig.add_axes(ax)    ax.imshow(arr)    plt.savefig(f_name, dpi=(dpi * resize_fact))    if plt_show:        plt.show()    else:        plt.close()如tiago上次答复中所述,首先需要找到屏幕DPI,例如,可以在此处完成:http : //dpi.lv我resize_fact在函数中添加了一个附加参数,例如,您可以将图像导出到原始分辨率的50%(0.5)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python