Pythonを使ってWindowsSpotlight(ロック画面)の画像取得
【目的・背景】
①Windowsロック画面に表示される画像を保存してデスクトップ背景のスライドショーにしたかった。
②Microsoft StoreのアプリがPCで制限されている関係で、SpotBrightは使用不可、バッチファイルで画像取得まで完了済み
③コピーしてきたファイルには目的の解像度以外の画像データも含まれているため、これを削除したい。
【バッチファイル】
rem コピー元アドレスセット set copy_from=C:\Users\%USERNAME%\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets rem コピー先アドレスセット set copy_to=C:\Users\%USERNAME%\Desktop\Assets rem ディレクトリコピー echo D | xcopy %copy_from% %copy_to% /Y rem 怖いのでディレクトリ移動 cd C:\Users\%USERNAME%\Desktop\Assets rem ファイル名変更 ren * *.jpg
【Python】
PILを使用する。コードは次の通り
import os import subprocess import PIL.Image as img #既成のバッチファイル呼び出し(画像取得) os.system("kabegami.bat") #ユーザーホーム取得 user = os.environ.get("USERPROFILE") print(user) #ファイルリスト取得 filelist =os.listdir(user+"/Desktop/Assets") print(filelist) os.chdir(user+"/Desktop/Assets") #各ファイル毎の処理 #削除条件に合致したものを削除 for file in filelist: try: im = img.open(user+"/Desktop/Assets/"+file) if im.size[0] == 1920: im.close() print("Pass") else:#解像度が1920*でない物を削除 im.close() print("Image_size_delete") os.remove(user+"/Desktop/Assets/"+file) except:#画像として認識できない物等を削除 print("exception_delete") os.remove(user+"/Desktop/Assets/"+file)
【運用】
①kabegami.batとspotlight.pyは同一ディレクトリに格納し、spotlight.pyを実行するだけ
Before(kabegami.batのみ)
After(spotlight.py実行)
やったぜ
【今後】
移動した後にもう一度バッチファイルを実行するなどして、既にある名称のファイルを持ってきた場合に問題が起こる。
ファイルのリネームが上手く行われず、拡張子がないファイルが残ってしまうのだ。
該当の拡張子がないファイルはimage.open()で開けてしまうので、今回作成したコードでは削除できない。
この問題へのアプローチとして「拡張子のないファイルを削除する」という条件を正規表現を使って追加しようと思ったが、30分程度で一旦挫折。
思えば、JavaJavaしてたときも正規表現は賢く使えていなかった。
今後の課題としてPythonで正規表現使った記法を一通りやってみたいと思う(やるとは言っていない)。