zoukankan      html  css  js  c++  java
  • 开源图片素材管理软件-civet

    目前市面上有相当多的素材管理软件,例如Bridge、Eagle等等,它们各有优劣。

    知乎上讨论的关于Eagle对硬盘有所伤害的问题,并不能够确定,因为双方至始至终没有提供一个性能图表。

    最新的同类软件是billfish,在发布伊始就受到了很大的关注,一开始就主打C++技术并以性能作为优先考虑;虽然性能对比图也并没有给出。

    从发布的时候,我就下载了该软件,进行了技术上的评估。

    1. billfish采用的是Qt开发,因此界面风格偏向于古老,虽然能够用来做跨平台开发,但是更多使用在非PC平台。

    2. 众所周知的原因,C++开发速度慢,即使是经验丰富的开发人员,也不能保证完全没有crash的问题发生;而且为了更快的性能,使用了多线程技术。由于billfish诞生时间很短,崩溃问题在一段时间内将会频繁出现。

    3. 对于本地数据库,billfish使用了sqlite。由于需要进行文本搜索,软件采用了腾讯某款名气不大的分词库,从技术上说,因为知名度低,使用的人少,所以踩坑很容易碰到无法解决的问题。

    4. 对于主色调抽取,采用的是查找表技术。软件内部已经提前设置好了颜色种类。 

    一、问题

     作为一个对图片有管理需求的用户来说,我比较关心如下几个问题:

    1. 存储的数据不能丢失。
    2. 丰富的检索功能。
    3. 多样化的存储支持。
    4. 多种类的格式支持。
    5. 好看而又易用的界面。

     从技术上来说,sqlite能够比较好的完上面的第1个功能。

    对于4这个需求,billfis采用了插件方式读取,因此后续对各种格式的数据读入是很容易的,然而由于UI采用的是Qt,所以界面的可扩展性不高,即使开放C++的插件接口,界面也较难美观的定制化。

    对于3这个需求,billfish提供了多种存储方式,并承诺后续会提供更多的存储方式。

    至于2这个需求,个人认为是一个考验算法架构能力的一个部分。牵涉到数据存储和检索,billfish如果仅仅只依靠sqlite自身的功能是不够的,需要有能力去对数据库本身做修改。

    billfish在推出之时,卖点之一是快速的批量加载。然而这个功能并不是经常使用,只在第一次才会用到。从技术角度来说,加载的性能并不需要很高,而且由于加载操作是IO操作,完全可以与图像分析操作分离。

    二、解决方案

    鉴于上述讨论的这些问题,我开发并开源了一个图像管理软件(预计三月左右发布第一个不带色彩检索的版本):

    https://github.com/webbery/civet

     

    这款软件在设计初期兼顾了上述几个问题:

    1. 一个好看的颜值是软件流行的一个重要因素之一,所以Electron是极佳的选择。

    2. 因为Electron界面是js写的,因此设计良好的架构完全可以为插件开发者提供自定义界面功能,能够集中开源社区的力量,以支持各类格式

    3. 对于磁盘读写的问题,快速而又高效的方式是使用共享内存技术。而lmdb数据库能够非常不错的满足需求。事实上,已经有不少做图像处理算法的人,已经在使用lmdb来保存图片了。

    4. 由于lmdb源码非常简单且协议友好,因此可以在这基础上进行修改,扩展新的检索算法

    5. 另外,可以支持成熟的中文分词算法,可以用来作为全文检索的分词器,而不是局限于sqlite中。

    6. 最重要的一点是,所有已知的管理软件都是闭源的,而这款软件是基于MIT协议开源的,用户完全可以基于该软件进行再次开发,以满足自己的需求。

    7. 跨平台的一致性(Mac、Win、Ubuntu)

    最新研发进展可到github查看:https://github.com/webbery/civet

    欢迎大家支持,谢谢

  • 相关阅读:
    js命名空间笔记
    css3兼容性问题归纳
    flexbox-CSS3弹性盒模型flexbox完整版教程
    JavaScript 预解析
    消除页面上的链接虚线框
    图片压缩之 PNG
    常见的前端优化技巧有哪些
    for-of循环和for-in循环的区别
    函数式编程初探
    js中同步与异步处理方法
  • 原文地址:https://www.cnblogs.com/webbery/p/12912200.html
Copyright © 2011-2022 走看看