注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Nihui's Blog

nihui的私人空间和日志

 
 
 

日志

 
 

我来教你 KDE 开发 --- KDE 文件缩略图生成器  

2011-05-16 13:28:58|  分类: 我来教你 KDE 开 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
KDE 文件缩略图生成器又名预览图生成器,主要在文件管理器中用作文件的预览图生成。
缩略图生成器和文件类型 mimetype 是绑定的,文件管理器可以根据文件的 mimetype 来找是否有合适的缩略图生成器,如果有,那么就请求缩略图生成器对需要预览的文件生成一张图片。
所以流程很简单,缩略图生成器的用途就是通过文件返回一张预览图。
系统中已经安装的缩略图生成器可以在文件管理器中查看,还能针对某些缩略图生成器进行特殊配置(KDE >= 4.7)。
大多数的文件类型都已经系统自带相应的缩略图生成器。

我来教你 KDE 开发 --- KDE 文件缩略图生成器 - nihui - Nihuis Blog
 
文件管理器只有在文件大小合适,并且相应缩略图生成器启用的时候才会显示出预览。生成预览图的时候,文件管理器会开始一次 KIO::PreviewJob 任务,依次对需要的文件进行。因为 KIO 不是线程安全的,所以无法利用多线程加快速度,是不是有点小遗憾呢?

实例教学 --- 开发 WMF 图像格式的缩略图生成器
这个插件已经放在 kde-apps.org 上了,要看具体的代码可以去下,此处略去所有 libwmf 的调用。

文件列表:wmfcreator.h  wmfcreator.cpp  wmfthumbnail.desktop CMakeLists.txt

wmfcreator.h
*************************************************************************************************************************
#ifndef WMF_CREATOR_H
#define WMF_CREATOR_H

#include <kio/thumbcreator.h>

/// 所有的生成器都实现 ThumbCreator
class WmfCreator : public ThumbCreator
{
    public:
        explicit WmfCreator();
        virtual ~WmfCreator();
        /// 创建预览的实际函数,path 是文件路径,img 是返回的图像
        /// width 和 height 是预览图大小,实际只有当预览图是手工排版画出来时需要参照,比如文本文件的缩略图
        /// 一般的图片不需要依照这两个参数缩放,直接返回即可,最后的大小是由文件管理器决定的
        virtual bool create( const QString& path, int width, int height, QImage& img );
};

#endif // WMF_CREATOR_H
*************************************************************************************************************************

wmfcreator.cpp
*************************************************************************************************************************
#include "wmfcreator.h"

/// 这里包含 libwmf 的头文件

#include <QImage>
#include <kdemacros.h>

/// new_creator() 函数是所有缩略图生成器共有的插件接口,必须按照如下方式实现
extern "C" {
    KDE_EXPORT ThumbCreator* new_creator() {
        return new WmfCreator;
    }
}

WmfCreator::WmfCreator()
{
}

WmfCreator::~WmfCreator()
{
}

bool WmfCreator::create( const QString& path, int width, int height, QImage& img )
{
    QByteArray ba;
    /// 此处省略 libwmf 的函数调用,作用是把 path 图像文件的图像存放在 ba 中,最后 img 从 ba 装入图像数据
    img.loadFromData( ba );
    /// 如果生成缩略图成功返回 true,否则返回 false
    return true;
}
*************************************************************************************************************************

wmfthumbnail.desktop
*************************************************************************************************************************
[Desktop Entry]
Type=Service
Name=Windows MetaFile
# 服务类型为 ThumbCreator
X-KDE-ServiceTypes=ThumbCreator
# 与本缩略图生成器对应的文件类型 mimetype
MimeType=image/x-wmf;application/x-msmetafile;
# 是否缓存生成的缩略图,true 意味着缩略图将缓存在 $HOME/.thumbnails 中
CacheThumbnail=true
# 是否忽略最大大小的限制,true 表示即便文件管理器设为只生成小于 5MB 文件的缩略图
# 如果文件大小是 6MB 照样会尝试生成缩略图,无视 5MB 的限制
IgnoreMaximumSize=false
# 二进制插件的名称
X-KDE-Library=wmfthumbnail
*************************************************************************************************************************

CMakeLists.txt
*************************************************************************************************************************
project(kde-thumbnailer-wmf)
cmake_minimum_required(VERSION 2.6)
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})

find_package(KDE4 REQUIRED)
find_package(Freetype REQUIRED)
find_package(LIBWMF REQUIRED)

include(KDE4Defaults)

add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS})
include_directories(${QT_INCLUDES} ${KDE4_INCLUDES})

include_directories(${FREETYPE_INCLUDE_DIRS})

set(wmfthumbnail_SRCS wmfcreator.cpp)

kde4_add_plugin(wmfthumbnail ${wmfthumbnail_SRCS})
target_link_libraries(wmfthumbnail
    ${KDE4_KIO_LIBS}
    ${LIBWMF_LIBRARIES}
)

install(TARGETS wmfthumbnail DESTINATION ${PLUGIN_INSTALL_DIR})
install(FILES wmfthumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR})
*************************************************************************************************************************

编译安装完后,运行 kbuildsycoca4 刷新 ksycoca 的数据库缓存,这样就在文件管理器中看到 Windows MetaFile 的缩略图生成器并启用了。打开工具提示功能,鼠标指向 wmf 文件能看到预览则说明成功了。

我来教你 KDE 开发 --- KDE 文件缩略图生成器 - nihui - Nihuis Blog
 
  评论这张
 
阅读(817)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017