バーr……blog のようなもの 2025 年 02 月

02 月 26 日 ( 水 )

Android 上で画像に Liit のようなフレームをつけることができるようにした

Liit によるフレーム付加がすでに定着しており、今やどの SNS でも Liit でフレームが附加された画像を見ることができる。

Liit によるフレーム付加って何?とういう人のために、再度画像をお見せする。Liit を使えば以下のように画像にフレームを付加することができる。メーカーの意匠まで附加された画像が SNS に多数アップされたことで、違法ではないか?と大騒ぎになったことは記憶に新しい。

坂本蓮 "坂本くんブログやるってよ" より

大雑把に説明するとスマホやデジタル写真機で撮影した JPEG データには Exif データというものが記録されている。Liit は Exif データの中からユーザが任意の Tag をチョイスし (チョイスできる Tag には制限があるかもしれない)、フレーム上にプリントすることができる。

もうすでにご存知だとは思うが、この Liit は iPhone 上でしか動かない。Android や他の OS には移植されてはいない。iPhone は持っていないけど同じことをやりたい、という人が続出した。筆者もその一人だ。

似たようなことができる Android 用のアプリとして以前は Sukashi というアプリがあった。しかし現在は Google Play Store から消えている。代替品は "exif frame" で検索すると、複数のアプリがヒットするので、どれかをチョイスすれば良い。

筆者の場合、撮影のメイン機材はデジタル一眼レフであり、JPEG 化はほぼ PC 上の Adobe Lightroom でやっている。なので Liit の代替品も PC で動いてくれないと困る。

さらに使用 OS が Ubuntu MATE ということもあり、Liit のクローンアプリは存在しない。なので Ubuntu MATE 上で同様のことができるプログラムとして addframe というものを Go 言語で書いた。コードは GitHub で公開している

なお GitHub 上では Ubuntu、Windows、MacOS 用のバイナリも配布している。PC へのインストールと使い方は GitHub 上の README を読んで欲しい。日本語の README も置いてある。

addframe でフレームを付加した画像が以下になる。

残念なお知らせをしなければならない。addframe では Exif Tag をユーザが選ぶことはできない。プログラム内で固定されている。Exif データのうちどの Tag がチョイスされているのかはコードを見て欲しい。load という関数にリストされている。

それ以外の詳細は GitHub の README やソースコード、添付の json ファイルを眺めてもらえればだいたい理解できると思う。

それと撮影者名だが Exif の Author Tag を読み出して出力している。スマホのカメラだと通常 Author Tag は存在しないので (存在する機種もあるかもしれないが機種依存)、撮影者名を出力するには Author Tag を書き込んでやる必要がある。exiftool などで直接書き込んでやってもいいのだけれど 便宜を図るために addcopyright というコードを Go 言語で書いた。やはり GitHub で公開している

addcopyright も addframe も Apache License 2.0 で公開しているので、気に入らなければライセンスに従って自由に手を加えてもらって問題ない。

addframe に関する日記は実は過去にすでに書いている。しかし恐らく覚えている人は皆無であろうとしか思えないので再度書いてきた。実はここまでは枕であって、ここから先が今日の日記の本題である。


昨年 8 月に妻と娘夫婦とで上高地にでかけた。実は現地でスマホを利用して addframe と同じことをやりたかった。やりたくていろいろアプリを利用したり Web サービスを利用したりと工夫を試みた。しかし addframe 自体が自分の好みにチューンされていることもあり、決して満足できるものではなかった。結局現地では何もしなかったと言っていい。

Android 上で動作する Termux という Linux ライクな端末環境がある。上高地へと出かける前に Termux 環境を利用すれば Android スマホで Ubuntu MATE 環境と同様に addframe を利用できるのではないかと思って準備を進めていた。しかし間に合わなかった。準備ができたのは今日の午前中のことだった。

以下にその準備のメモを残す。本当にメモなので、詳細は各自調べて欲しい。

必要なもの
  • f-droid

    Google Play Store ではなく f-droid のサイトからインストールする。

  • Termux

    Google Play Store からではなく f-droid でインストールする。

  • git

    Termux 上で pkg install git でインストールする。

  • golang

    Termux 上で pkg install golang でインストールする。

  • Vim

    Termux 上で pkg install vim でインストールする。Emacs が好きなら Emacs でも良い。nano が好きなら nano でも良い。ed で頑張りたいならそれもよい。

  • ImageMagick

    addcopyright、addframe から呼び出される。必ずインストールしなければならない。pkg install imagemagick でインストールすれば良い。

  • exiftool

    addcopyright、addframe から呼び出される。必ずインストールしなければならない。pkg install exiftool でインストールすれば良い。

あると良いもの
  • tmux

    なくても問題はないが、筆者は画面を遡りたいことが多いのと複数ペイン、複数ウィンドウを使いたいのでインストールしている。

  • vifm

    作業効率が劇的に変わるのでインストールをお勧めする。

  • 好きな shell

    普段使ってる shell をインストールすれば良い。bash がデフォルトなので bash が好きなら他の shell を入れる必要はない。筆者は fish を愛用しているので Termux にも fish を入れている。

フォントファイルの Termux 環境へのコピー

フォントがないと addframe はエラーで落ちる。正確には addframe が呼び出している ImageMagick がエラーを返して処理を中断する。ImageMagick が利用できるフォントファイルを Termux 環境にコピーしなければならない。

筆者は TrueType フォントと OpenType フォントを使っている。Bitmap フォントはそもそも美しくないこともあり使ったことがない。

筆者は ~/Pictures/font ディレクトリにフォントファイルを置いている。

addcopyright のインストール

以下の手順を推奨。

  1. go install github.com/mitsugu/addcopyright@latest
  2. ~/go/bin/addcopyright へのシンボリックリンクを /data/data/com.termux/usr/bin に張る。なぜこんな面倒なことをしているのかというと、Termux 環境では PATH 環境変数を変更できないから (まじで何をしても無駄)。
addframe のインストール

以下の手順を推奨。

  1. go install github.com/mitsugu/addframe@latest
  2. ~/go/bin/addframe へのシンボリックリンクを /data/data/com.termux/usr/bin に張る。なぜこんな面倒なことをしているのかというと、Termux 環境では PATH 環境変数を変更できないから (まじで何をしても無駄)。
json ファイルの編集

Github で公開している json 形式の設定ファイルをダウンロードし、Vim で編集する (もちろん Vim でなくてもよい)。ImageMagick のフルパス、exiftool のフルパス、フォントファイルのフルパスは環境にあわせて必ず編集しなければならない。他のパラメータは変更したければ変更してもよい。

ただし json の中身を理解せず適当に変更すると addcopyright や addframe がクラッシュすることがある。あるいはエラーになる。エラーにならず、単に出力画像が崩壊する程度で収まる場合もある。

Google Pixel 9 Pro Fold にて撮影し、同スマホ上で addframe と addcopyright を利用して作成。