我只是复制了图像并将其保存到当前目录中的另一个临时文件夹中,没有任何修改,但图像占用了更多“磁盘空间“比它”字节大小".
和!当我这样做时,我只丢失了大部分图像的元数据,例如位置数据、设备型号、F 号等Color space
, Alpha channel
and Dimensions
被保存下来。
这是我所做的代码:
from PIL import Image
import os
image_path = "/Users/moomoochen/Desktop/XXXXX.jpg"
img = Image.open(image_path)
pathname, filename = os.path.split(image_path)
new_pathname = (pathname + "/temp")
if not os.path.exists(new_pathname):
os.makedirs(new_pathname)
img.save(os.path.join(new_pathname, filename))
# If I want to adjust the quality, I do this:
img.save(os.path.join(new_pathname, filename), quality=80)
所以我的问题是:
1)为什么字节大小与磁盘空间不同?
2)如何调整我的代码以保留所有图像的元数据?
两件事情...
你其实不是“简单地复制”你的文件。您在图像处理器中打开它,将其扩展为可处理的像素矩阵,然后将图像重新保存到磁盘 -减去您的图像处理器不感兴趣的任何内容 :-)
如果要复制包括 EXIF 数据的完整文件,请使用shutil
像这样:
#!/usr/local/bin/python3
from shutil import copyfile
copyfile('source.jpg', 'destination.jpg')
报到Finder:
其次,所有“磁盘上”文件系统有一个最小分配单位,这意味着如果你的文件增长,它也会增长一个完整的单位,即使你只需要多 1 个字节的空间。大多数磁盘使用 4,096 字节分配单元,因此 33 字节文件将占用 4,096 字节空间。我必须说你的冗余比 4k 更高,所以也许你正在运行在大块中的胖 RAID 上以提高性能?
例如,您可以在终端中执行此操作:
# Write a file with 1 logical byte
echo -n "1" > file
# Look at file on disk
ls -ls file
8 -rw-r--r-- 1 mark staff 1 15 Nov 08:10 file
仔细一看,1
after staff
意味着逻辑大小是 1 个字节,这就是程序读取整个文件时得到的大小。但第一个8
左边是磁盘上的块数。每个块是 512 字节,因此这个 1 字节文件需要 8 个 512 字节的块,即磁盘上的 4kB!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)