「指定フォルダ内の画像ファイルをサムネイルで一覧表示する HTML」をつくる Python スクリプト

ローカルに保存している画像ファイルたちを簡単に俯瞰する手段が欲しいと思っていたが、良い方法が見当たらなかったのでつくることにした。

成果物

GitHub に置いた

github.com

サンプル

指定フォルダ内の全画像を、こんな感じでズラリと並べる。

f:id:stakiran:20190126155213j:plain

クリックすると画像本体を開く。

表示サイズと一行分の画像枚数はスクリプト側でいじる。

# ★ここ
conf_image_x = 150
conf_image_y = 150
conf_image_count_per_line = 6

スクリプト

# encoding: utf-8

import os
import sys

def str2file(filepath, s):
    with open(filepath, encoding='utf8', mode='w') as f:
        f.write(s)

def get_filelist(basedir):
    ret = []
    for path, dirnames, filenames in os.walk(basedir):
        for filename in filenames:
            fullpath = os.path.join(path, filename)
            ret.append(fullpath)
    return ret

MYFULLPATH = os.path.abspath(sys.argv[0])
MYDIR = os.path.dirname(MYFULLPATH)

filenames_all = get_filelist(MYDIR)
filenames_jpg = [filename for filename in filenames_all if filename.lower()[-4:]=='.jpg']
filenames_curdir_removed = [filename.replace('{:}\\'.format(MYDIR), '') for filename in filenames_jpg]
filenames_slash_delim = [filename.replace('\\', '/') for filename in filenames_curdir_removed]

print(filenames_slash_delim)
print('{:} items.'.format(len(filenames_jpg)))

outfilename = 'image_gallery.html'
outstrs = ''

conf_image_x = 150
conf_image_y = 150
conf_image_count_per_line = 6

for i,image_filepath in enumerate(filenames_slash_delim):
    url = image_filepath
    alttext = url

    image_html_template = '<a href="{href}" target="_blank"><img src="{src}" width="{width}px" height="{height}px"></a>'
    image_kwargs = {
        'href'   : url,
        'src'    : url,
        'width'  : conf_image_x,
        'height' : conf_image_y,
    }

    image_html = image_html_template.format(**image_kwargs)

    outstrs += image_html
    outstrs += '\n'
    if i%conf_image_count_per_line==(conf_image_count_per_line-1):
        outstrs += '<br>\n'

html_template = """<html>
<head>
    <title>Image Gallery</title>
    <meta charset="UTF-8">
</head>
<body>
{:}
</body>
</html>"""

html = html_template.format(outstrs)
str2file(outfilename, html)

使い方

  • image_gallery.py など適当なファイル名で保存
  • HTML を生成したいフォルダに、このファイルを配置する
  • python image_gallery.py
  • HTML ファイルが生成されるはず

FAQ

追々使いやすく改造するかもしれないが、とりあえず FAQ の形で書いとく。

Q. ライセンスは?

Ans: MIT

Q. PNG画像は対応してない?

Ans: してない。

適当にスクリをいじって改造してちょ。

Q. 画像ファイルの表示順序はどうなっている?

Ans: よくわからん。

たぶんファイル名と階層がからんだ昇順降順みたいな感じだと思う。