探测图片类型

今天遇到一个小问题,如何探测图片的文件类型。总结如下:

python magic

magic 模块的github地址在这, 可以用来方便地探测文件类型,使用示例如下,可以方便地探测一个文件或是字节流文件。

>>> import magic
>>> magic.from_file("testdata/test.pdf")
'PDF document, version 1.2'
>>> magic.from_buffer(open("testdata/test.pdf").read(1024))
'PDF document, version 1.2'
>>> magic.from_file("testdata/test.pdf", mime=True)
'application/pdf'

imghdr

python提供的标准库 imghdr 可以用来确定图片的类型,参见这里

API如下:

imghdr.what(filename[, h])
# 接受文件名作为参数。如果提供了字节流作为第二个参数,那么第一个文件名参数会被忽略,从而探测字节流的图片类型

简单的例子如下:

>>> import imghdr
>>> imghdr.what('bass.gif')
'gif'

可能的返回类型如下:

  • 'rgb': SGI ImgLib Files
  • 'gif': GIF 87a and 89a Files
  • 'pbm': Portable Bitmap Files
  • 'pgm': Portable Graymap Files
  • 'ppm': Portable Pixmap Files
  • 'tiff': TIFF Files
  • 'rast': Sun Raster Files
  • 'xbm': X Bitmap Files
  • 'jpeg': JPEG data in JFIF or Exif formats
  • 'bmp': BMP files
  • 'png': Portable Network Graphics

PIL.Image

使用PIL也可以检测图片类型,例子如下:

from PIL import Image

img = Image.open(filename)
print(img.format) # 'JPEG'

而且可以用 PIL 方便地转化图片格式,它会自动检测后缀以合适的格式保存:

import Image
im = Image.open('test.jpg')
im.save('test.tiff') # or 'test.tif' # 或者手动指定格式
import Image
im = Image.open("file.png")
im.save("file.jpg", "JPEG")

最新文章

  1. 项目安排(离散化+DP)
  2. Javascript如何实现AOP
  3. 遇到bug怎么办
  4. python模块与包的导入
  5. Spring学习总结(二)——静态代理、JDK与CGLIB动态代理、AOP+IoC
  6. eclipse新建安卓项目点击finish后窗口无法关闭
  7. phabricator
  8. DebugViewHierarchy
  9. oracle中存储过程的使用
  10. 解决kibana 4 关于响应时间的问题
  11. XCode: Target Settings和Project Settings的区别
  12. Android Log工具类
  13. C++如何将一个整数输出为小数
  14. Java多线程之synchronized(一)
  15. webstorm 2018.2.3 license server
  16. IDEA SpringBoot多模块项目搭建详细过程(转)
  17. [android] 帧布局
  18. 把菜单栏变成万能工具箱,让你的 Mac 更酷炫
  19. kubernetes集群搭建(4):node节点安装
  20. bzoj 2142

热门文章

  1. Java设计模式—模板方法模式
  2. Android实现异步的几种方法
  3. Gremlin--一种支持对图表操作的语言
  4. 初识ImageSwither
  5. API:相关词语笔记
  6. IOS SQLite函数总结
  7. framework7 可以拉动右侧工具栏和点击当前item就可以出发事件的HTML结构
  8. linux命令之awk命令
  9. DevExpress控件经验集合
  10. matlab 下载