0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

初心者が電子書籍制作用に画像チェックプログラム作ってみた

Posted at

#自己紹介
##そんなことよりまずコードだ

import fnmatch,os
from PIL import Image
from datetime import *
from glob import glob

target_files,loglist,out_list=[],[],[]
zip_dir="E:\チェック場"
root_dir=os.path.abspath(os.path.dirname(zip_dir+"\\"))

def printlog(self):
    print(self)
    loglist.append(self)

def makelog(ok,ng):
    if len(out_list)==0:
        printlog(f"\n{ok}\n")
    else:
        printlog(f"\n{ng}\n")
        for out in out_list:
            printlog(f"{out}\n")
    out_list.clear()

def check(jpg_list):
    for check_target in jpg_list:
        im=Image.open(check_target)
        if im.mode!="RGB":
            out_list.append(check_target+":現在のモード:"+im.mode)
            pass
        if (max(im.size)>1920):
            out_list.append(check_target+":現在の長辺:"+str(max(im.size)))

#画像長辺とカラーモードのチェック
def imgcheck():
    for root, dirs, files in os.walk(root_dir):
        dirs[:] = [d for d in dirs if "thum" not in os.path.join(root, d)]
        targets = [os.path.join(root, f) for f in files]
        target_files.extend(targets)
    jpg_list=[i for i in target_files if fnmatch.fnmatch(i,"*.jpg"or"*.png")]
    ok,ng="画像長辺・保存モード:OK","以下の画像は仕様から外れています。"
    check(jpg_list)
    makelog(ok,ng)

#サムネイル画像のチェック
def thum():
    thum_files,ok,ng=[],"\nサムネイル画像:OK","辺に誤りがあります。\n現在:"
    for root, dirs, files in os.walk(root_dir):
            jpg_thum = [os.path.join(root, f) for f in files]
            thum_files.extend(jpg_thum)
    thum_in=[t for t in thum_files if "thum" in t]
    for check_thum in thum_in:
        im=Image.open(check_thum)
        s,m=min(im.size),[1400,2400]
        if s not in m:
            printlog(f"\n{check_thum}の短{ng}{s}\n")
        else:
            pass
    else:
        if s in m:
            printlog(ok)

#ログを出力
def lg():
    n = 0
    for dirpath, dirs, files in os.walk(root_dir):
        zips=[(os.path.join(i)) for i in files if fnmatch.fnmatch(i, '*.zip')]
    tm=datetime.now()
    filetime=str(tm.month)+"月"+str(tm.day)+"日"+str(tm.hour)+"時"\
              +str(tm.minute)+"分"
    with open(zip_dir+"\\check_log_"+str(filetime)+".txt","w") as f:
        f.write("チェック対象:\n")
        for put in zips:
            f.write(str(zips[n])+"\n")
            n+=1
        for put in loglist:
            f.write(str(put))

def ImgCheck():
    imgcheck()
    thum()
    lg()

##理解度確認
タグにある通りの初心者なので、自分で書いたものを理解しているかが怪しい。
例えば、最初に用意してある空のリストは、順繰りにインスタンスを作成していって使い回す用ですが、こんなことしなくても、もっと賢いやり方があるのでは?と疑っています。
引数周りも変ですよね。でもとりあえず動かしたくて、「まずは実用しながら直していこう」の精神で作るだけ作りました。

##何に悩んでいるの?
空のリストを用意しておくのもなんですし、切り分けや圧縮も、もっと上手にやりたいです。そもそも各種命名もちゃんとしようよという状態なので、「動けばいいや」からは、どんどん脱していきたいですね。

##環境
windows10(64),python3.7.2

##どうしてpython?
1.会社に本があり、
2.勧められたからたまたま知っていて、
3.機械学習に使われる言語だからです。

汎用性ってステキ!

##何を意図したプログラム&記事なのか?
コードは画像が規定サイズに収まっているかとカラーモードのチェックをかけさせています。
記事は、初心者らしく備忘録と、あとは検索で誰かの参考になればいいなという感じですね。

##プログラミングの現在の目標は?
他に作ってある分も合わせてexe化までしているのですが、
1.記述自体をスマートかつ「まとも」にしたい、
2.スタンドアローンで動くようにしたい(現在はjavaのepubcheckと紐づけてて絶対パス指定以外のやり方を知らないので手元でしか動かない)、
3.ついでなのでWebアプリ化もしてみたい。

##そもそも何者か?
電子書籍制作で食っている者です。
CSSちょこっと分かるぐらいで、WebやIT畑というよりかは「ぱそこんつかっておしごとするひと」ぐらいの存在ですね。テキストエディタでマクロ組んだり、正規表現も割と頻繁に使ってます。RPAはUWSCで使うくらい。
今後も電子書籍制作関連で作った記事を載せていく予定。

##次の予定
epubcheck0.3.1をpipでインストールしました。
https://pypi.org/project/epubcheck/
最後の更新が2016年になっているので、epubcheckのバージョンだけ最新にして使っていきます。
作れたら、また記事を上げますね。

##プログラムするにあたり参考にした資料
初期知識:
かんたん Python (プログミングの教科書):出版社: 技術評論社
https://karaage.hatenadiary.jp/entry/2017/12/27/073000
画像:
https://note.nkmk.me/python-opencv-pillow-image-size/
exe化:
https://techacademy.jp/magazine/18963

##今後勉強する予定のもの
・django(Webアプリ化)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?