我正在编写一个必须处理多个图像的程序。他们中的许多人有不同的分辨率(dpi)。有没有办法从文件属性中检索信息?我尝试了PIL.ExifTags,PIL.IptcImagePlugin,其他EXIF提取器,但一切都返回None。
答案 0 :(得分:1)
如果它无法通过exif工具从jpeg获取dpi,则jpeg可能没有exif并且可能具有JFIF(APP0元数据)。它可以从JFIF获得dpi。
def get_resolution(filename):
with open(filename, "rb") as f:
data = f.read()
if data[0:2] != b"\xff\xd8":
raise ValueError("Not JPEG.")
if data[2:4] != b"\xff\xe0":
return None
else:
if data[13] == b"\x00":
unit = "no unit"
elif data[13] == b"\x01":
unit = "dpi"
elif data[13] == b"\x02":
unit = "dpcm"
else:
raise ValueError("Bad JFIF")
x = 256 * ord(data[14]) + ord(data[15])
y = 256 * ord(data[16]) + ord(data[17])
return {"unit":unit, "resolution":(x, y)}