ゆるキャン△スタンプラリー遠州コース

年末の浜名湖コースに続いて三コース目の遠州コースを回ってきた。

企画の最初の頃は、浜名湖・遠州・富士山麓の三コースだったけど、後半になってHPなどを見てみると浜名湖・遠州コースと、富士山麓コースの2コースになっていた。最初に行った富士山麓でも気づいたが、景品のステッカーが足りなくなったんじゃないかなと邪推してみた。

今回は遠州コースということで前回浜名湖コースの続きとなる。Ⓐ磐田市の見付天神からⒷ掛川の茶屋・きみくら、Ⓒ御前崎渚の交番という施設、で最終のⒹ富士山静岡空港でゴールとなる。

磐田市見付天神

カーナビが上手い具合に神社外周の臨時駐車場に案内してくれたので問題なく駐車。普通に神社の駐車場に向かってしまったら渋滞で大変なことになっていただろうw

掛川市きみくら

ここも聖地巡礼コース、原作でも登場した茶店。2階が喫茶店で昼食時間でもあったのでぜんざいを戴いてきました。メニューをよく見たらお茶漬けもあったので、、それにすれば良かったと少し後悔。あと期間限定のイチゴパフェのボリュームが凄かったです。

昼食ボリューム的にどうかな?とは思ったけど、まぁ年齢的にあまり食べ過ぎない方が良いかと…w

御前崎渚の交番で異常事態発生!!!

続きを読む…

HEIF→JPEG変換

ブログへの写真アップロードの件で少し考えたのが、以前のスマートフォンをiPhoneに変えたときに写真の画像ファイルフォーマットがデフォルトではjpegではなくheifになっていたので、互換性を重視するためにということでjpegに変更していた事。コマンドラインで一括変換する仕組みを導入するにあたって、改めてheifフォーマットの利点を調べてみた。ウィキペディアなどで調べてみると、画質はそのままで圧縮率が2倍以上と、保存用途としてもかなり良いため再びheifでの保存に切り替えることとする。

で、必要になってくるものがpythonでheifを扱うためのライブラリ’pyheif’

とりあえずbrewでインストール出来るということで、まずは必要なライブラリから

$ brew install libffi libheif (libde265) # 括弧はWSL2の場合

その後にpipでpythonライブラリのインストール

$ pip install pyheif

と、WSLではうまく行ったのだが、自分の環境のMacOSではpipでインストールエラーとなった。どうやらclangのインクルードパスが/opt/local/includeを要求しているのに対し、それが無いためらしい。内容を調べてみると、/opt/homebrewというディレクトリが/opt/localであれば色々解決しそうなので、試しにシンボリックリンクを張ることとした。

$ sudo ln -s /opt/homebrew /opt/local

これで旨く/opt/local/includeを見つけることが出来、pyheifライブラリがインストール出来た。

次にサイトを参考に先日のアップロード準備用リサイズプログラムwpresizeにheifデコード機能を組み込んでみた。

from PIL import Image
import pyheif

heif_file = pyheif.read("sample.heic")
image = Image.frombytes(
    heif_file.mode, 
    heif_file.size, 
    heif_file.data,
    "raw",
    heif_file.mode,
    heif_file.stride,
    )
image.save("output.jpeg", "JPEG")

ただし上記はあくまでも画像を変換するだけで、Exif情報はコピーされない。そこでpyheifからExif情報を取り出して出力JPEGファイルに付加する方法を調べてみた。

heif_file(pyheifオブジェクト)にはその他にmetadataというプロパティがあり、メタデータを格納する辞書形式(のリスト)であると説明される。リストと言っても内容は一つしかなく、そのゼロ番目の内容を調べると

type: 'Exif'
data: xxxxxx(バイナリ情報)

であったため、このdataの中身が撮影画像のExif情報だということが分かる。これを保存時に付加することでExif付きで保存することが出来る。

.....
exif = heif_file.metadata[0]['data']
.....
image.save("output.jpeg", "JPEG", exif=exif)

GPS情報だけ消したり、Exif情報を編集したいのであれば、前回同様に一度辞書形式に変換してやれば編集可能となる。

exif = heif_file.metadata[0]['data']
exif_dict = piexif.load(exif)
del exif_dict['GPS']
exif = piexif.dump(exif_dict)
image.save("output.jpeg", "JPEG", exif=exif)

結局メタデータ自体が2重に辞書保管されるような形になっていたのが分かりにくかったです。

あともう一点注意すべき点は、Exifの記載されている画像の回転情報。カメラ構え方で画像の縦横を変えて表示したいが、オリジナル画像から縦横変換をしようとすると画素の並び順から変えなければならず、再圧縮からの点からも非効率的(勝手な想像)だと思うので、Exifの情報として画像をどの様に表示するのかの向き(回転)情報を保管している。サムネイルやビューワはこの情報をもとに画像を表示している(GIMPなどの編集ソフトはこの情報をもとにするが、向きに合わせてオリジナルのピクセル情報を並び替えるのかを聞いてくる)。

そういった意味かと思うが、heif_fileで変換されたイメージはExif情報は保存されないが、Exifの回転情報をもとにピクセルを並び替えているようで、オリジナルを右90度回転した縦長画像を変換しても、縦長画像として出力される。これに対して右90度回転したExif情報を付加すると、さらに画像回転情報が加わり横倒しになった画像になる。

この辺りの仕組みを変換時に制御出来るかどうか調べられなかったので、とりあえずは変換時にオリジナルの回転処理がされるものとして、保存するExif情報のうち回転情報のみ1(正転)に戻しておくこととした。

exif = heif_file.metadata[0]['data']
exif_dict = piexif.load(exif)
del exif_dict['GPS']
exif_dict['0th'][274] = 1  # 回転情報を保持するExifアドレス(右回転の場合6になってるので正転1とする)
exif = piexif.dump(exif_dict)
image.save("output.jpeg", "JPEG", exif=exif)

対処療法的ではあるが、とりあえずこれでExifを保管し画像の向きを保持して変換出来るようになった。

前回のwpresizeに組み込んだところがこちら(masterにコミットしてしまったので前回のリンクもheif対応の物になってますw)。

pyheifオブジェクトに関しては詳しい資料が見つからなかったので、自分で調べる形になってしまった。とりあえず結果オーライで暫く運用ということで

Amazon Prime Video のスクリーンショット

コンテンツ保護と私的目的の複製のイタチごっこはまだ続いていたのかー。

ビデオテープの時代が終わりあらゆるコンテンツがデジタルとなり、あらゆる私的複製が封じられて来ました。今残っているのはダビング10対応のビデオ、BD-Rなどの保護済みのメディアへの記録。動画配信では持ち出し用のダウンロードがあるがこれらもDRMでキッチリ管理されておりユーザーによる無尽蔵な複製は出来ないようになっている。

別に不満があるわけでもなく、この辺りで落ち着くのかなと思っていたら、さらにスクリーンショットまで保護される流れになってきているっぽい。今までチョットしたメモ代わりにスクリーンショットをしていたが最近はOSアップデートされる度にコッソリ制限が追加されているようで、現在ウチの環境はWindows11とMacOS12ですが、どちらもAmazonPrimeなどDRMコンテンツのスクリーンショットが撮れないようになっている。確か昔は出来ていたような気がするが。。。

スクリーンショットといってもやり方は色々あり、OSの機能からなる(Copyキーなど)や、ビデオボードメーカー等のサードバーティーによるゲームなど配信用のキャプチャ機能もあり、つい最近までPrimeVideoなどのキャプチャが出来ていたハズ。

恐らくであるが、コロナ禍によるテレワークやオンライン飲み会などでデスクトップキャプチャーを使う機会が増えており、コレによって低品質ではあるが著作物であるコンテンツが共有できてしまうことが明るみに出てくることになり問題視されてきたという経緯もあるのかも知れない。

キャプチャ方式昔(半年くらい前)現在
Windows Copyキー不明スクリーンショット不可
NVIDIA ゲーム配信用キャプチャスクリーンショット可スクリーンショット不可
ManyCamスクリーンショット可スクリーンショット不可

現在はあらゆる手段でスクリーンショットが撮れなくなっているので、モニタ画面をスマホで撮るくらいしか方法がないということのようだ。

あと試したやり方はVMwareなどの仮想マシンを使う方法。VMwareではゲストOSの画面をキャプチャする機能が備わっているが、それを使えばホストマシンからゲストマシンで起動したAmazonPrimeビデオのSSを撮ることが出来た。当然ゲストマシン内ではDRMが効くのでSSは撮れない。古いOSを入れればイケるのかなとも思ったが、そもそも古いOSでは最新のDRMコンテンツは再生出来ないが。

ホストマシンからはゲストで表示している画面がDRMかどうかを差し当たって知る術が無いためこのような事が出来るのだと思うが、この辺りも仮想化ソフト側で対応されてしまうことが考えられ、うっかりアップデートが出来ない状況だと言える。(仮想マシン内でもモニタはHDMIに相当するもので仮想的に接続することも出来るため、仮想化ソフトの方でそのあたりを実装することでDRMコンテンツが表示されているときにキャプチャを禁止するような機能が追加出来てしまう可能性がある)

ちょっとグレーゾーンなお話でした。著作物の保護は大事だけど、あまりやり過ぎるのはチョットね。利便性を享受したいならユーザーの方でもあまりやらかさないような配慮も必要かも。

2022年明けましての投稿

新年のネタは、3Dプリンタによる鏡餅。丁度白シルクのフィラメントがあったので8cmサイズで製作しました。ミカンは本物です。A4ペーパーを二つ折りにして、裏白はインクジェット用OHPシートに印刷してそのまま乗せてますw

昨日の投稿では旅行物だけあった写真が多く、貼り付ける写真について一枚一枚、GIMPで開いてサイズ変更して上書きセーブしてアップロードという手順を取っていたため非常に面倒で時間のかかる作業だった。前々から気になっていたが何となく惰性で過ごしていた感がある。

それに加えて、こちらの環境ではSafariとWorpressのライブラリの相性が悪く、非常に反応が遅く、下手するとハングアップしてしまうので、このブログ書きの時だけMicrosoftのEdgeを起動していたりします。

その部分は差し当たっては仕方の無いことで、追々と問題を解決しなければと思うところですが、とりあえず画像のサイズ変換アップロード環境だけは早急に何とかしないと、ということで、pythonスクリプトで画像サイズ変換プログラムを自作しました(リサイズだけでたいしたことはしていない為)。

Pillowという画像ライブラリとpiexifというExif編集ライブラリを使用しています。長手方向の幅を2000以下としてファイル名を変えて(-fオプションを付けるとオーバーライト)保存する単純なプログラム。

ついでにExif情報のうちGPS情報を削除します。

まぁ自分の一眼レフカメラはGPS持ってないし、iPhoneの写真をMacからアップするときは写真をフォルダコピーした段階でGPS情報は消されているっぽいので、普通には問題無いのだが、OneDriveのカメラロールに保存された写真とかたまにGPS情報がベッタリ貼られたまま流通しがちなので注意が必要です。

Pillowとpiexifを使用したExif編集の仕組みは以下の通り。

import piexif
from PIL import Image

img = Image.open('sample.jpeg')
exif = img.info['exif']
exif_dict = piexif.load(exif).  # Exif辞書情報の取り出し

# 取り出した辞書情報を編集します
del exif_dict['GPS']     # GPS情報を削除

# 編集後保存可能なバイナリデータに戻します
exif = piexif.dump(exif_dict)

# リサイズなどした新しい画像データの作成
img_new = img.resize([with, height], Image.BICUBIC)

# 編集したExifを適用して保存します
img_new.save('output.jpeg', quality=95, exif=exif)

久々のプログラミング。そういえばMacでの開発環境は作っただけで実践は初めてだった。。。いろいろライブラリとか入れ忘れてたりして意外とドタバタしました。

ゆるキャン△スタンプラリー浜名湖コース

※ 実は昨日続きの遠州コースに行ってきたのですが、まずは書き溜めていた浜名湖コースから…(遠州コースは後日に)

新年明けて一発目ですが、いきなり昨年末の話になります。11月に引き続き掲題ゆるキャン△スタンプラリーin静岡の2回目で浜名湖コースに行ってきました。日程は12月18〜19日。名古屋から出発してまずはⒶの佐久米駅(天竜浜名湖鉄道)の”喫茶かとれあ”からスタート。全部で5カ所だが、全開の富士山周回と比べて距離が近いので余裕の日程です。まずはアニメ本編にも出たうなぎ屋さんで豪華な昼食をして、次にⒷの奥浜名湖観光協会、ここは同じく天竜浜名湖鉄道の気賀駅でアニメ本編では大判焼きを買っていた所。偶然ゆるキャン△仕様のラッピング車両にも出合いました。次のⒸは大村酒店という普通の酒屋さんーこれも本編登場なのかな。

予定では一日目は以上の3カ所でしたが、早々に回ってしまったので、2日目に予定していた弁天島の舞阪町観光協会を夕方に訪れることにしました。ここで運の良いことに弁天島赤鳥居と夕日を同時に拝めるシチュエーションに出合うことが出来ました。ちゃんと予習をしていればそういうコースにしていたのですが、これはホントに偶然のラッキーでした。

浜松のホテルで一泊して二日目は残り一カ所で余裕ということで午前中は浜松の楽器博物館Ⓕに寄り道をして、5カ所目うなぎパイファクトリーⒼ。遅めの昼食でⒽさわやかハンバーグ(ズレた時間なのにメチャメチャ混んでいた)を経由して帰宅しました。


続きを読む…