You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Matplotlib如何保存精确像素尺寸图像并调整宽高比

问题根源

你之前调不准像素尺寸的核心原因有两个:

  • 你在savefig里加了bbox_inches='tight'参数,这个参数会触发matplotlib自动裁剪画布边距,直接覆盖提前设置的画布尺寸,不管怎么计算dpi都会出现偏差
  • 你没有按照「画布英寸尺寸 × dpi = 输出像素尺寸」的固定公式设置参数,靠手动试凑dpi当然没法得到精准结果
方案1:需要用matplotlib渲染的场景(比如要叠加绘图元素、标注)

完全不需要反复试dpi,你可以随便定一个好算的dpi值(比如常用的100),反过来推算画布尺寸即可,核心公式非常简单:
fig宽(英寸)= 目标像素宽 / dpi
fig高(英寸)= 目标像素高 / dpi
对应你要输出11230×11229像素的图,直接用下面的代码即可,边距已经设为0,不会产生多余白边:

import matplotlib.pyplot as plt

# 定义目标像素尺寸
target_w = 11230
target_h = 11229
my_dpi = 100  # 可任意设置为整数,不影响最终输出像素精度

fig, ax = plt.subplots(figsize=(target_w/my_dpi, target_h/my_dpi), dpi=my_dpi)
plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0)
plt.axis('off')
plt.imshow(superpositionFINAL)
# 注意必须去掉bbox_inches='tight'参数,否则会破坏预设尺寸
plt.savefig('myImage.png', pad_inches=0, dpi=my_dpi)
plt.close()

运行后输出的图像素尺寸完全匹配设定值,如果要调整宽高比,直接修改target_w和target_h的数值即可,不需要额外调整其他参数。

方案2:仅需读写、修改图像尺寸的场景(不需要额外绘图)

如果你只是要读取图像、调整尺寸后保存,完全没必要用matplotlib,很容易踩画布、边距相关的坑,直接用Pillow(PIL)处理即可,代码更简洁、处理速度更快,像素精度100%可控:

from PIL import Image

# 如果直接处理代码里的numpy数组格式图像
img = Image.fromarray(superpositionFINAL)
# 如果从本地文件读取则用 img = Image.open('原图像路径.png')
# 直接调整到目标像素尺寸:宽11230,高11229
resized_img = img.resize((11230, 11229))
resized_img.save('myImage.png')

这个方法不需要关心dpi、画布、边距这些冗余概念,尺寸参数直接对应输出像素值,宽高比可以任意调整。

补充:resize方法默认使用邻近插值,如果需要更高的缩放质量,可以传入第二个插值参数,比如Image.Resampling.LANCZOS适合缩小图像,Image.Resampling.BILINEAR适合放大场景,可根据实际需求选择。

内容的提问来源于stack exchange,提问作者chang thenoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 20:03:25