Python画像ファイルをトリミングしてHTMLファイルに埋め込む

python コンピュータ
python
PythonとOpenCVで画像のフィルター加工を試行錯誤しているのですが、実施したフィルターの組み合わせを記録しておく方法が無いか考えてみました。
テキストと画像をファイルとして保存するフォーマットは色々ありますが、スクリプトから作成しやすいのはテキストベースのフォーマットになります。そうなるとHTMLが良いだろうと言うことで、画像をBase64でエンコードしてHTMLに埋め込むことで単一HTMLで画像を表示できる形に出力するスクリプトを作ってみました。

#!/usr/bin/env python3
# coding: utf8

import cv2
import numpy as np
import os, glob
import base64

# 画像フィルターのテスト

# テキストファイルの書き込み
def write_html(file_name, title, body):
    f = open(file_name, 'w',  encoding='UTF-8')

    text = '''<!DOCTYPE html>
<html lang="ja">
    <head>
        <title>{}</title>
    </head>
    <body>
    {}
    </body>
</html>'''
    html = text.format(title, body)
    f.write(html)
    f.close()
    
# 画像を中心から指定サイズで切り出し
def trim_center(img, width, height):
    h, w = img.shape[:2]
    
    top = int((h / 2) - (height / 2))
    bottom = top+height
    left = int((w / 2) - (width / 2))
    right = left+width
    
    return img[top:bottom, left:right]

# 画像ファイルをbase64にエンコード
def img_to_base64(file_name):
    f = open(dst_file, 'br')
    bin = f.read()
    b64data = base64.b64encode(bin)
    result = b64data.decode("utf-8")
    f.close()
    return result

if __name__ == '__main__':
    file_name = 'output.html'
    title='TestFilters.py'
    body='<div>hoge</div>'
    
    src_file = 'C:/Users/PC01114/Pictures/202205061049.JPG'
    dst_file = 'output.png'
    width = height = 64
    img = cv2.imread(src_file)
    dst = trim_center(img, width, height)
    cv2.imwrite(dst_file, dst)
    
    body += "<img src='data:image/png;base64,{}'>".format(img_to_base64(dst_file))
    
    os.unlink(dst_file)
    
    write_html(file_name, title, body)

肝心のフィルター処理が無いので切り出した64×64画像が一つだけですが、とりあえず思った通りの動作はしてくれています。

コメント