使用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小屋(Python_xiaowu)

原文发表时间:2016-11-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

Tesseract文字训练,以及样本生成

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details...

20710
来自专栏AI研习社

Github 项目推荐 | TensorFlow 的模型分析工具 —— TFMA

TFMA 是一个用于评估 TensorFlow 模型的库,它可以让用户使用 Trainer 里定义的指标以分布式方式评估大量数据的模型。这些指标也可以在不同的数...

24520
来自专栏ATYUN订阅号

多模型机器学习功能数据库EuclidesDB全新发布

EuclidesDB,一个多模型机器学习功能数据库,发布了0.1版本。EuclidesDB 0.1与PyTorch紧密耦合,为模型特征空间中包含和查询数据提供后...

10010
来自专栏云霄雨霁

计算题总结

37200
来自专栏AI科技大本营的专栏

TensorFlow 1.8.0正式发布,Bug修复和改进内容都在这里了

【导语】TensorFlow 1.8.0 近日正式发布,新版本主要有以下改进内容,AI科技大本营对其编译如下。 ▌主要特点及改进 可以将 tf.contrib...

42290
来自专栏帮你学MatLab

期刊要求图片eps格式的输出

期刊图片 部分版本在生成eps文件是会报错,才发现原来这个工具升级了,这是新的下载地址:http://www.mathworks.com/matlabcen...

36260
来自专栏王亚军的专栏

谷歌开源图片压缩算法 Guetzli 实测体验报告

谷歌大神又出开源新技术啦,这次是对JPEG格式的图片采用全新算法重新编码,输出的图片还是JPEG但是图片大小明显缩小,而质量不但没有损失,甚至还更加优化,速速来...

9.4K10
来自专栏自然语言处理

深度学习环境搭建

本文作者的专题《目标检测》链接:https://www.jianshu.com/c/fd1d6f784c1f 此专题的宗旨是让基础较为薄弱的新手能够顺利实现目标...

52410
来自专栏DeveWork

制作WordPress侧边栏“随机文章”小工具并集成在主题中的方法

在侧边栏显示个“随机文章”小工具据说有两个好处:一是可以提高访客的点击率;二是对搜索引擎友好。一些主题并没有集成“随机文章”小工具,而网络上提供的一些方法只是给...

316100
来自专栏ATYUN订阅号

小白也可以操作的手机TensorFlow教程:Android版和iOS版

TensorFlow通常用于训练海量数据,但新兴的智能手机市场也不可忽略。那些不能等待未来和love Machine Learning的人正在通过制造工具来突破...

41560

扫码关注云+社区

领取腾讯云代金券