缩略图管理标准

缩略图管理标准

1.历史

  • May 2012, Version 0.8.0

Modified to respect the XDG Base Directory Specification

  • September 2004, Version 0.7.0

Added readonly support for shared thumbnail repositories

  • September 2002, Version 0.6.1

The subdirectories weren’t a good idea. Removed them from this version.

Updated link to the MD5 implementation.

2.简介

该标准旨在为缩略图提供一种通用的解决方案,保证所有需要用到缩略图的程序都可以共享已经生成的缩略图。

3.需要解决的问题

  • 提供一个通用的缩略图存放路径
  • 存放原始图片的文件信息,保证不访问原始文件的前提下获取这些信息
  • 提供处理不同大小缩略图的机制
  • 注意缩略图失败处理机制

4.缩略图目录

如果定义了XDG_CACHE_HOME环境变量

$XDG_CACHE_HOME/thumbnails/
$XDG_CACHE_HOME/thumbnails/normal
$XDG_CACHE_HOME/thumbnails/large/
$XDG_CACHE_HOME/thumbnails/fail/

如果没有定义XDG_CACHE_HOME环境变量

$~/.cache/thumbnails/
$~/.cache/thumbnails/normal
$~/.cache/thumbnails/large/
$~/.cache/thumbnails/fail/
  • Normal: 正常尺寸为 128128 pixel. 如果需要更小比例的,使用128128的进行缩放

  • Large: 大尺寸为 256*256 pixel

  • Fail: 存放缩略图生成失败的文件信息

You must not create/save thumbnails for any files you will find in these directories. Instead load and use these files directly.
不需要重复创建在这些目录中已经存在的缩略图,直接使用这些缩略图。

5.缩略图生成

  • 必需属性
    属性 含义
    Thumb::URI 绝对路径 (eg file:///home/jens/photo/me.jpg)
    Thumb::MTime 原始文件的修改时间
  • 附加属性

    属性 含义
    Thumb::Size File size in bytes of the original file.
    Thumb::Mimetype The file mimetype.
    Description This key is predefined by the PNG standard. It provides a general description about the thumbnail content and can be used eg. for accessability needs.|
    Software This key is predefined by the PNG standard. It stores the name of the program which generated the thumbnail.|
  • 文件类型特定属性

    属性 含义
    Thumb::Image::Width The width of the original image in pixel.
    Thumb::Image::Height The height of the original image in pixel.
    Thumb::Document::Pages The number of pages the original document has.
    Thumb::Movie::Length The length of the movie in seconds.

6.缩略图保存

  • 缩略图名字由md5算法决定,必须使用标准的uri进行md5运算,包含协议头file:// smb:// http://等
  • $XDG_CACHE_HOME/thumbnails目录权限为700, 目录中的缩略图文件权限为600
  • 并发问题,缩略图的生成是为了共享,如果两个或多个程序程序都在同时为一个图片生产缩略图,需要遵循以下原则:
    • 首先检测对应的缩略图文件是否存在并且有效,如果存在并有效,则直接使用。
    • 如果不存在或是无效,先生成一个临时文件写入磁盘, 然后在重命名为正确的名字,临时文件的名字可以包含进程名或进程id

例如 file:///home/jens/photos/me.png 对应的缩略图文件名为c6ee772d9e49320e97ec29a7eb5b1697,完整的路径对应为/home/jens/.cache/thumbnails/normal/c6ee772d9e49320e97ec29a7eb5b1697.png

7.监测变化

程序监听文件属性的变化,如果文件的修改时间和缩略图中存放的修改时间不等,应该重新生成缩略图。

    if (file.mtime != thumb.MTime) {
          recreate_thumbnail ();
    }

8.缩略图创建失败

  • 未知的图片文件格式或者是程序无法加载该文件
  • 文件格式已知,但是该图片文件已经损坏,文件不可读
  • 文件太大,缩略图生成时间比较长

对于上述原因导致,缩略图生成失败的情况,可以在fail目录中创建一个空文件,存放文件的基本信息,避免程序重复的尝试。这种问题出现一般都是因为每个程序对缩略图支持程度不一样导致。最好的方法就是在fail目录中创建每个程序特定目录失败目录,譬如fail目录中应该保存一个dde-file-manager目录,存放文件管理器失败的缩略图文件

9.删除缩略图

通用的原则就是文件不存在,对应的缩略图应该删除。如果文件只是被改变了,缩略图应该重新生成。一般实现方式有如下几种:
+ 如果程序监测到源文件已经删除,应该删除对应的缩略图
+ 启动一个daemon程序,定时清理cache
+ 用户可以调用一个显示缩略图和源文件的管理工具,通过管理工具去清除无效的缩略图或者是过期(30天)的缩略图

10.参考

Freedesktop thumbnail

发表评论

电子邮件地址不会被公开。 必填项已用*标注