Мне понравился ответ в Ubuntu, но он не показывал явно, как установить размер для неквадратных изображений из коробки, поэтому я изменил его для легкой копирования-вставки:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
def save_image_fix_dpi(data, dpi=100):
shape=np.shape(data)[0:2][::-1]
size = [float(i)/dpi for i in shape]
fig = plt.figure()
fig.set_size_inches(size)
ax = plt.Axes(fig,[0,0,1,1])
ax.set_axis_off()
fig.add_axes(ax)
ax.imshow(data)
fig.savefig('out.png', dpi=dpi)
plt.show()
Сохранять изображения без рамки легко, независимо от того, какое значение dpi вы выберете, если сохранить pixel_size / dpi = size.
data = mpimg.imread('test.png')
save_image_fix_dpi(data, dpi=100)
Однако отображение выглядит жутко. Если вы выберете маленькое dpi, размер вашего изображения может быть больше, чем у экрана, и вы получите границы во время отображения. Тем не менее, это не влияет на сохранение.
Так что для
save_image_fix_dpi(data, dpi=20)
Дисплей становится окаймленным (но сохранение работает):