您当前的位置:首页 > 计算机 > 编程开发 > Python

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

时间:09-03来源:作者:点击数:

下面的代码需要安装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))

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门