Giter Club home page Giter Club logo

randomimageviewer's Introduction

随机图片查看器

Random Image Viewer

简 介

一个类似于Line of Action的随机显示本地图片的程序。可以对着自己收集的参考图练习,不用受制于非会员的图库和自己的选择困难症了。
可以遍历给定目录下的所有图像,通过方向键右随机查看。 支持以原顺序查看之前随机的图片,支持定时切换图片,支持暂停定时,支持图片旋转。
可以将遍历的文件路径放在内存里,每次运行程序重新遍历;也可以将文件路径保存在数据库中,省去每次遍历目录的时间。
可以设置全屏/窗口大小、窗口背景色。可以让每次随机的顺序相同。

程序下载

这里

使用方法

0.本地图片目录

首先选择一个心仪的图片文件夹,将其路径粘贴到程序根目录下的目录.txt中。

  • 如果根目录下没有目录.txt可以手动创建,也可以运行一次程序让程序创建。
  • 文件夹中可以嵌套文件夹,也可以包含非图像文件(但是文件多的话会延长文件树生成速度)。
  • 可以一次性放入多条路径。此时请每行只粘贴一条路径。
  • 路径需要使用绝对路径。
  • 支持的图片格式:.jpg .png .jpeg .bmp .tif .tga .eps .psd 想要增加支持的图片格式需要使用源码。
  • 根目录下的config.ini是配置文件。

1.运行模式

运行模式指遍历后的文件路经保存方式,通过修改配置文件参数mode指定。有ontimemongodb两个选项。 默认使用实时模式。

ontime 实时模式

将生成的文件树保存在内存里。每次运行程序需要重新生成文件树。文件数量较少时比较好用,省去配置数据库的烦恼。 那么什么程度文件算多呢,...自己试试?1w以下?

mongodb 数据库模式

使用MongoDB数据库保存文件树。相比实时模式只需要生成一次文件树,对于包含大量图像的文件夹来说省去了每次启动程序等待文件树生成的时间。 通过使用不同的数据库表还可以快速更改目标文件树。

使用数据库模式需要安装pymongo。具体操作请看下文-1.使用MongoDB

2.快捷键

esc ctrl+q q

+ 关闭图片窗口 退出程序

f ctrl+f 全屏/窗口切换
方向键右(->) 下一张图片
方向键左(<-) 上一张图片
<(,逗号) 顺时针旋转90度
>(。句号) 逆时针旋转90度
enter(回车键) 开始/暂停计时切图
鼠标滚轮 上一张/下一张图片

除了这些,还支持matplotlib的快捷键。如果有需要(缩放什么的)可以 去看看

3.小功能

  • 计时功能

通过修改配置文件参数time设置。单位是秒,默认是600秒(10分钟)。计时结束后会自动切换到下一张图片。

  • 背景色

通过修改配置文件参数background设置。默认为黑色。可以通过(部分)颜色的英文单词指定。 可接收参数请看这里

  • 随机

可以通过修改配置文件seed参数设置随机数生成器的种子,固定随机模式。每次运行会输出当前使用的种子(默认为程序启动时间)。

4.示例

默认情况(实时模式、时间间隔10分钟、背景为黑色、全屏)
效果:
regular

背景色为白色 时间间隔30秒(实时模式、全屏)
background=white time= 30
效果:
white_background

指定窗口尺寸为800*600 设置随机数生成器种子为42 使用数据库模式(时间间隔10分钟、背景为黑色)
screensize=800,600 seed=42 mode=mongodb
效果:
window

5.高级设置

  • 屏幕尺寸

screensize指定。想调整尺寸请传入宽和高,单位是像素,宽在前高在后,用英文逗号分隔,如600,600

也可以在运行时手动拖动窗口修改。这个功能有什么意义

  • 自定义目标文件

targetpath指定,默认为根目录下的目录.txt。如需指定需要传入目标文件的绝对路径。

  • debug模式

debug模式会输出每张图片的地址。

-1.使用MongoDB

通过mode=mongodb指定使用数据库模式。 client参数指定数据库地址,默认是本地数据库。database参数指定数据库名称,默认为RandomImagecollection参数指定数据库表名,默认为ImagePath

初次使用数据库或者图片目录发生改动需要使用initialize参数调用数据库初始化方法,将文件树保存到数据库内。

- 注意:

initialize方法会清空当前数据库表之后再保存新文件树。

当图片目录中添加新图片可以使用update调用数据库更新方法,将新图片的路径保存到数据库中。 目录中少几张图片无需调用该方法,程序运行时会自动删除无效路径。

当想清除数据库表中的数据时可以通过clear调用删除方法。

- 一定要想清楚再删库。

注意

  • 程序初始化稍微有些慢。
  • 暂停计时切图的时候没有提示,你可能不清楚当前计时是运行还是暂停的状态。
  • 暂停计时时计时器其实还在走,如果等待时间超过设定值,在取消暂停后会立刻切换到下一张图片。
  • clear参数慎用!会删除当前配置的数据库表!
  • 运行的时候会切换不了窗口。这是个bug,得改。
  • 加载大图片的时候会费点劲。
  • 在某些版本下会有白边(我只试了matplotlib 2.0.2),我也没定位到bug,也不一定会修。

使用源码

1.依 赖

pillow
matplotlib
pymongo (可选 不用数据库模式可以不装)

2.可用参数

基础设置
-m --mode 文件树保存模式 可选ontimemongodb 默认为ontime

-t --time 指定切换图片的等待时间 单位为秒 默认为600秒(10分钟)
-b --background 指定背景颜色 默认为黑色
--seed 指定随机数生成器的种子

数据库相关
--client 指定数据库地址 默认是mongodb://localhost:27017/
--database 指定数据库名称 默认为RandomImage
--collection 指定数据库表名 默认为ImagePath
--initialize 调用数据库初始化方法 布尔值 默认为False
--update 调用数据库更新方法 布尔值 默认为False
--clear 调用删除方法 布尔值 默认为False 慎用!

高级设置
--screensize 指定窗口大小 设置请看下文
--showimage 是否显示图片 默认显示 只是为了调试方便 给数据库喂数据时也挺好用
--configfile
--targetpath

irrelevant
-v --version 版本号
-d --debug debug模式

3.高级设置

  • 缓存

提前读取几张图片,在显示图片时可以少花点时间(但是好像影响了初始化时间?)。 反正我每次也画不了几张

不建议自己修改,但是有需求可以去imgcache.pyINITCACHE是初始化缓存大小,MAXCACHE每次更新后最多缓存数量,CACHE是启动更新的标志。 CLEARCACHE是总缓存的大小。

  • 添加支持图片格式

理论上PIL能打开的图片都可以支持,但是我只添加了几个我认为比较常见的图片格式。 添加新的图片格式需要修改dirtree.py中的ImageType,将想添加的文件后缀加到列表里。注意:对大小写敏感。

  • debug模式

使用debug模式需要通过--configfile关闭配置文件,即配置文件的debug比命令行参数的debug优先级高。 debug模式的参数需要通过main.py中指定。debug模式会输出每张图片的地址。

4.实现方法

文件遍历通过pathlibiterdir方法递归实现。
数据库通过pymongo实现。
随机通过random.randint结合列表/find_one方法的skip参数实现。
图片通过PIL读取,缓存通过Thread实现,显示通过matplotlib实现。按键通过mpl_connect实现。

Random Image Viewer v1.0

randomimageviewer's People

Contributors

passerbyzhao avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.