为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

宝慕林4294392 2019-11-25 11:21:35
假设我的图像尺寸为3841 x 7195像素。我想将图形的内容保存到磁盘上,以得到我指定的确切大小(以像素为单位)的图像。没有轴,没有标题。只是图像。我个人并不关心DPI,因为我只想指定图像在磁盘中以像素为单位在屏幕上所占的大小。我读过其他 线程,它们似乎都转换为英寸,然后以英寸为单位指定图形尺寸并以某种方式调整dpi。我想避免处理像素到英寸转换可能导致的精度损失。我尝试过:w = 7195h = 3841fig = 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而不是其他图像保存库的方法。
查看完整描述

3 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

根据tiago接受的响应,这是一个小型通用函数,该函数将numpy数组导出到与该数组具有相同分辨率的图像:


import matplotlib.pyplot as plt

import numpy as np


def 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)。


查看完整回答
反对 回复 2019-11-25
  • 3 回答
  • 0 关注
  • 1361 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号