前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Python提取JPEG图像文件dpi并计算物理尺寸

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

作者头像
Python小屋屋主
发布2018-04-16 14:52:07
3.8K0
发布2018-04-16 14:52:07
举报
文章被收录于专栏:Python小屋Python小屋

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档