Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中打开图像并以相同的分辨率和dpi重新保存_Python_Image_Matplotlib - Fatal编程技术网

在python中打开图像并以相同的分辨率和dpi重新保存

在python中打开图像并以相同的分辨率和dpi重新保存,python,image,matplotlib,Python,Image,Matplotlib,我正在学习一些使用python的非常基本的隐写术 到目前为止,我一直在使用以下方法打开文件: from matplotlib import pyplot as plt import numpy as np file_location = '...'.png rgb_data = np.array(plt.imread(file_location)) ... manually or otherwise edit some RGB values ... plt.axis('off') plt

我正在学习一些使用python的非常基本的隐写术

到目前为止,我一直在使用以下方法打开文件:

from matplotlib import pyplot as plt
import numpy as np

file_location = '...'.png

rgb_data = np.array(plt.imread(file_location))

...
manually or otherwise edit some RGB values
...

plt.axis('off')
plt.imshow(rgb_data)
plt.savefig('image.jpg', dpi=96)
注意:在上面的代码中,我省略了对图像所做的特定编辑。这是因为我不认为他们是我的问题的一部分。即使我不做任何更改,只是加载然后重新保存图像,我仍然会遇到以下问题

以这种方式使用matplotlib保存图像时,我遇到了三个问题

1。使dpi匹配 我不确定如何使输出图像的dpi与读取图像的dpi自动匹配

2。使分辨率匹配 默认情况下,输入和输出图像的分辨率不匹配。即使我手动匹配两幅图像的dpi,它们仍然没有匹配的分辨率

3。获取匹配的文件大小 我的最终目标是生成与原始图像具有相同dpi、分辨率和文件大小的图像。这样,当我开始玩RGB值时,表面上看起来应该是完全相同的图像

我的问题是如何保存文件,使输出图像的dpi和分辨率(大概是通过扩展大小…)与输入匹配?

当然,图像中的像素数以及dpi应该固定分辨率。但是,看起来输出图像保存时周围有白色边框,这也会降低分辨率

欢迎使用任何python库的解决方案。但是,最好对现有代码进行编辑。因为我经常使用matplotlib,所以知道如何在将来避免这个问题也会很有用。非常感谢你的帮助

plt.save(…)
将保存Matplotlib图形。如果只想使用Matplotlib,请参阅

输出图像应与输入图像匹配

但我认为用枕头来保存你的形象会更好

import PIL.Image as Image
import numpy as np

file_location = "img.png"
path_to_save = "out.png"

img = Image.open(file_location) 
rgb_data = np.array(img)

# modify your image

rgb_data = Image.fromarray(rgb_data)
rgb_data.save(path_to_save, format="PNG") 
# you can also specify dpi, quality and etc.
# for example rgb_data.save(path_to_save, format="PNG", dpi=(300,300))
(注意:可能由于输入图像大小的压缩设置,输出大小会有所不同,请参阅)

plt.save(…)
将保存Matplotlib图形。如果只想使用Matplotlib,请参阅

输出图像应与输入图像匹配

但我认为用枕头来保存你的形象会更好

import PIL.Image as Image
import numpy as np

file_location = "img.png"
path_to_save = "out.png"

img = Image.open(file_location) 
rgb_data = np.array(img)

# modify your image

rgb_data = Image.fromarray(rgb_data)
rgb_data.save(path_to_save, format="PNG") 
# you can also specify dpi, quality and etc.
# for example rgb_data.save(path_to_save, format="PNG", dpi=(300,300))

(注意:可能由于输入图像大小的压缩设置,输出大小会有所不同,请参阅)

太棒了,非常感谢!这很详细地回答了我的问题,相关的帖子也很有帮助。太棒了,非常感谢米哈伊尔!这很详细地回答了我的问题,相关的帖子也很有帮助。