AVIFが読めないアプリケーションがたまにあるので、AVIF(AV1 Image File Format)画像をJPEGなど他の形式に変換する方法をメモしておきます。AVIFが変換できるなら別に何でも良いのですが、今回はImageMagickを使用します。
AVIFとは何かですが、まずMPEG系のHEICファイル形式があります。HEIF(High Efficiency Image File Format)コンテナにHEVC(High Efficiency Video Coding, ISO/IEC 23008-2 HEVC, ITU-T H.265)で圧縮した画像を格納したファイル形式です。AVIFはHEIFコンテナを流用して、HEVCの代わりにAV1(Alliance for Open Media Video 1)で圧縮した画像を格納したファイル形式です。まとめるとこんな感じです。
ファイル形式 | コンテナ | 画像圧縮方式 |
---|---|---|
HEIC | HEIF | HEVC/H.265 |
AVIF | HEIF | AV1 |
WebP | WebM(Matroskaサブセット) | On2/Google VP8, Google VP9(当時、AV1対応が遅れていたらしい) |
AOMedia(Alliance for Open Mediaを略したもの)を含む、非MPEG系の陣営はWebMというMatroskaベースのコンテナを使うことが多いです。でもAVIFはHEIFを使うんですよね。動画系コーデックは大抵MPEG系のMP4(ISO/IEC 14496-12, 14 MP4ファイルフォーマット)コンテナに対応していますし、MPEG系コンテナを使うこと自体は変ではないですが……。WebPの策定が遅れたらしく、AVIFが先に流行っちゃったのは面白いなと思います。
ビルド前の準備です。AVIFはHEIFコンテナを使っていますので、HEIFを扱うためのライブラリをインストールしておきます。
# apt-get install libheif-dev
ImageMagickのソースコードはGitHubにあるので、cloneしてきてビルドします。
$ git clone https://github.com/ImageMagick/ImageMagick $ cd ImageMagick $ mkdir build $ cd build $ ../configure $ make
AVIFを扱えるかどうかはconfigureログのHEICの行に表示されます。
Delegate library configuration: BZLIB --with-bzlib=yes yes Autotrace --with-autotrace=no no DJVU --with-djvu=yes no DPS --with-dps=no no FFTW --with-fftw=no no FLIF --with-flif=no no FlashPIX --with-fpx=no no FontConfig --with-fontconfig=yes yes FreeType --with-freetype=yes yes Ghostscript lib --with-gslib=no no Graphviz --with-gvc=yes no HEIC --with-heic=yes yes ★yesになっていればOK JBIG --with-jbig=yes yes JPEG v1 --with-jpeg=yes yes JPEG XL --with-jxl=yes no ...
下記のように実行します。
./magick.sh ./utilities/magick hato.avif hato.jpg
ビルドに失敗していると、no decode delegate for this imageエラーが出て怒られます。
magick: no decode delegate for this image format `AVIF' @ error/constitute.c/ReadImage/746.
このメッセージが出るときは先ほど紹介したconfigureのログを確認してみてください。
いきなり仕事部屋のシーリングライトが消えました。蛍光管の寿命にしては去年(2022年10月19日の日記参照)替えたばかりですし、もしかして本体が壊れた……?
リビングのシーリングライト(同機種)と蛍光管を入れ替えると点くので、蛍光管は生きていて本体(Panasonic HHFZ4290)が壊れたようです。去年の蛍光管交換時に「2回目交換する前にシーリングライト本体が壊れそう(本体の寿命<蛍光管2回分の寿命)」と予想していましたが、その通りになりました。悲しいね。
昨今は蛍光灯が悪者扱い(わずかに水銀を使う)で製造禁止に向かっているようです(一般照明用の蛍光ランプの製造・輸出入は2027年までに廃止されます - 環境省)。店頭にはほぼLEDのシーリングライトしか売っていません。
広範囲を照らせると触れ込みのPanasonic HH-CG1034Aを買いました。明かりの色を白くしたり黄色くしたり好きに変えられるのは、LEDならではですね。あとリモコンがでっかいです。邪魔くさい。
目次: Linux
VSCodeのPlantUML Extensionをインストールすると、MarkdownにPlantUMLの図を混ぜることができます。
何も設定しない状態だと、
このようにプレビュー画面に「No PlantUML server, specify one with "plantuml.server".」エラーが出ます。
VSCodeのSettingsの検索ボックスにplantuml.serverと入力するとPlantuml: Server項目が出るはずなので、そこにサーバーのURLを設定します。ヘルプメッセージにもあるように、自分で書いたPlantUMLのソースコードをインターネットに送ってよければhttps://www.plantuml.com/plantumlを指定するのが最も簡単です。
設定し終わったら、このようなMarkdownの文書で動作確認します。
# Title 1
This is body.
## Title 2
- aaa
- aaa is AAA
- bbb is BBB
```plantuml
node "PC" as pc {
node "CPU" as cpu
node "OS" as os
}
cpu -> os: boot
```
プレビュー画面にこのような画像が出るはずです。
www.plantuml.comサーバーを使用したときの表示例
表示されました、簡単ですね。しかし外部にソースコードを送りたくない場合もあります。
インターネットに自分で書いたPlantUMLのソースコードを送信されると困る場合は、PlantUMLのサーバーをローカルで起動すると良いです。PlantUMLのサイト(PlantUML Downloads and Source Code)から、PlantUMLのJARファイルをダウンロードします。今回はバージョン1.2024.4を使用しました。
起動方法は公式サイト(PlantUML PicoWeb Server)にある通りにやりましょう。
$ java -jar ./plantuml-mit-1.2024.4.jar -picoweb:5000:0.0.0.0
オプション-picowebにてサーバーが待ち受けに使うポートとアドレスを指定します。
VSCodeのPlantuml: Serverには、PlantUMLのローカルサーバーを動作させているマシンのIPアドレスと、PlantUMLを起動するときに指定したポートを指定します(例えば、http://192.168.1.2:5000など)。設定し終わったら先ほどと同じMarkdownの文書を用いて動作確認します。一度プレビュー画面を閉じてもう一度開いてください。
Insecure contentを表示させない設定になっているときの表示
VSCodeはhttpつまり暗号化されていないサーバーとの通信を拒否する設定になっています(改ざんが可能なので)。しかしローカルLANで実験する場合はこの制限は不要ですので、プレビュー画面に「Some content has been disabled in this document」と書かれた横長のボタンが表示され、画像が表示されないときは、
ボタンを押し、リストに表示される「Allow insecure content Enable loading content over http」を選択します。
プレビュー画像が表示されました。生成される画像は似ていますが、私の環境だと文字の表示が変になってしまいます。なぜだろう……?それは今度調べるとして、インターネット上のサーバーに比較してレスポンスが早いです。良いですね。
これはテスト用の簡易サーバー機能なので、本格的に運用する際はアプリケーションサーバーに登録したほうが良いと思います、その設定はまた今度。
< | 2024 | > | ||||
<< | < | 04 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | - | - | - | - |
合計:
本日: