駅前散策ブログ@かわさき HOT

「わーんお前の母ちゃん平成女児」といったらコーハイの嫁がダメージを受けた件について

【RPA】【MacroDroid】シェルスクリプトを活用して、JPG画像に著作権テキストファイルの埋め込みをしてみる

2020-01-18 12:44:27 | Macrodroid&RPA関連
(´・ω・)ノ < らいなーです。



今週は久方ぶりに風邪を拗らせまして、
朝から内科に通院となりましたが、個人病院でも最近は一時間以上診察にかかりますね。
これが川崎市立病院の内科などになりますと、二時間から三時間に成るわけですから、
まだマシな方ではあるのですが。

さて、
先般画像がパクリに遇いました件について、対策を進めましたが、パクった相手先がRPAサイトでありますので…


ま、折角なのでモバイルRPAを使って対策もしましょうよ、と。

WinActorとTor連携させて相手先に攻撃を加える自動処理も作りましたが、
休みにWinActorやらUiPathなんぞ使いたくないわフハハハー(作ってから言うけど内容は、口チャックするよ)。

あとWinActorとかパソコンまわりのRPA仕事、
世の中にはパソコンをなんでもできる箱と思っている人がいるので、要件定義の時に無茶を言われるのは「ふつうの要件定義のときより、RPAは多いよ」と言っておきますね。
だってヒアリングの相手がガチのエンドユーザなんですもの…苦労しますよ……?



では本題。



【したいこと】

スマホ本体内のフォルダ、
仮に、/storage/emulated/0/Downloadとします。以降、このフォルダを「ターゲットフォルダ」とします。

ここに、sfb.txtという著作権記載を行ったファイルをひとつ、固定で配置しているものとします。



中身はこんな感じです。
二行目のハッシュはぼかしてます。
ま、みる人が見れば長さで判ってしまいますが、とりあえずMD5にしてますよっ。


ターゲットフォルダに、jpgもしくはjpeg拡張子のファイルを配置します。


画像ではjpegとjpgを配置しました。
配置した画像をバイナリエディタで見てみます。




ファイルの末尾には何もついていませんね。

この状態から、Macrodroidでシェルスクリプトを動かし、



元のjpgおよびjpegファイルの拡張子は維持したままで、「Macrodroidの処理が実行された年月日時分秒ー連番」形式の「sfb.txt記載の著作権情報がバイナリレベルで埋め込まれた」ファイルを新たに作成します。



こんな感じになります。
Macrodroidの自動処理で作成された画像ファイルをバイナリエディタで見ると、末尾に著作権情報(ハッシュ含む)が付与されている感じになります。
この記事の掲載画像にはもう活用していますよ!


【どう実現する?】

実現にあたり、以下のサイトさまの記事を参考にさせて頂きました。作成者・サイト管理者の皆様ありがとうございます。大変勉強になりました。






まず成果物から見ていただきましょう。



ローカル変数は二つ用意しました。

・Const_Target_Directory
 →ターゲットフォルダ指定用の固定値です。
  この変数に作業で用いる端末本体内のフォルダを指定します。
  非ルート端末ではSDカードに対する操作権限がMacrodroidには付与されないため、端末本体側を指定します。これは、Macrodroidフォーラムでも散々話題になっている【仕様】なので対策としてはADBハックするか、Rootを取るしかありません。

・Const_Initial
 著作権埋め込み処理済ファイルの連番の開始番号制御用の変数です。
 0にすれば連番は0開始、1にすれば連番は1開始となります。


【肝:アクションの実装】

実装したアクションは三つです。

・変数を設定
  Const_Initial ← 1を代入
・変数を設定
  Const_Target_Directory ← ターゲットフォルダを指定
・シェルスクリプト

  

  組み込んだスクリプトは以下のとおり。

  count=[lv=Count_Initial]
  cd [lv=Const_Target_Directory]
  for file in `ind . -maxdepth 1 -name '*.jpeg' -or -name '*.jpg'`;
  do
   cat $file sfb.txt > [year][month_digit][dayofmonth][hour][minute][second]-$count.${file##*.}
   count=`expr $count + 1`
  done

  まず、変数Countに初期値をセット、
  次にCDコマンドでターゲットフォルダに移動します。
  そして、
  for file~ 始まるルーブで、ターゲットフォルダにあるjpgもしくはjpegファイル全てを対象として、リスト取得し、
  catコマンドのファイル結合機能を利用して、画像ファイルの構造を維持したままで、著作権情報を付与します。
  最後に変数Countを(Unixシェルスクリプトでは割りと一般的なexprを用いた方法で)カウントアップして、次のループ画像処理に備えます。

 ちなみにfor文のところの拡張子は小文字にしか対応させていないので、必要なら、
 maxdepth 1の後ろの半角スペースの後にでも、
 -or -name '*.JPG' -or -name '*.JPEG'
 を追加してください。

これで処理は完成ですが、
「処理完了」を確認したい場合には、
ひとつアクションを追加して

・通知
 「処理完了!」のメッセージを表示

すれば良いでしょう。


【蛇足:なんでCopyコマンドでの結合じゃなくてcat使ってるの?】

それはな!
僕のAQUOS R Compact(非ルート)には、Copyコマンドが無かったからさ!





かなしぃ出来事だったんやでぇ…


以上で今回の記事は終わりでございます。
ここまでお読み下さりありがとうございました。

この記事についてブログを書く
« 公開方法変更のお知らせ | トップ | 【RPA】【MacroDroid】5chの話題に乗っかってみ... »