0


使用Python提取JPEG图像文件dpi并计算物理尺寸

感谢浙江省浦江中学方春林老师提供的问题、测试图像和第一版本的代码!

下面的代码需要安装Python图像处理库pillow,由于不同公司对JPEG压缩算法和格式的实现不完全一样,有些类型的jpg文件暂时无法提取dpi信息,如果找到好的办法的话后期会再进行补充。

from os import listdir

from PIL import Image

from PIL.ExifTags import TAGS

def getPhysicalSize(fn):

#打开图像文件并获取以像素为单位的尺寸

im = Image.open(fn)

width, height = im.size

#尝试直接获取dpi信息

try:

    dpi = im.info['dpi']

except:

    #如果直接获取失败,再尝试获取exif信息

    t = {}

    info = im._getexif()

    #获取失败,直接返回

    if not info:

        return 'Not known'

    #从exif信息中提取水平分辨率和垂直分辨率

    for k, v in info.items():

        tt = TAGS.get(k)

        if tt in ('XResolution', 'YResolution'):

            t[tt] = v

    dpi = [item[1] for item in sorted(t.items())]

#获取失败,返回

if not dpi:

    return 'Not known'



#不同压缩格式的文件信息保存方式不一样

#适当转换一下

if isinstance(dpi[0], tuple):

    w_dpi, h_dpi = dpi[0][0], dpi[1][0]

else:

    w_dpi, h_dpi = dpi

#返回物理尺寸信息,像素数/dpi分辨率,再换算成毫米    

return (round(width/w_dpi*25.4,2), round(height/h_dpi*25.4,2))

for fn in (fns for fns in listdir('.') if fns.lower().endswith(('.jpg', '.jpeg'))):

print(fn, ':', getPhysicalSize(fn))
标签: python java opencv

本文转载自: https://blog.csdn.net/dongfuguo/article/details/118704603
版权归原作者 dongfuguo 所有, 如有侵权,请联系我们删除。

“使用Python提取JPEG图像文件dpi并计算物理尺寸”的评论:

还没有评论