やんちゃクラブリスナー Advent Calendar では、書き出す前に「こんな感じで書いていこう」という大まかな流れを頭に入れていたが、思ったより俺は遅筆だった。
おおなかさんの記事を見て「俺もやんちゃエフェクトせねば!」という気持ちになったのでブログをしたためることにした。
エフェクトの前に所有のファングッズもどき
ファングッズの話も書きたかったのだが、実は公式ファングッズ相当のものは持っていない。ただ、チェアリングできそうなイスはあるので紹介する。
LOGOS Life バックホールドチェア
実は我が家にあぐらチェアはない。実際にアウトドアで使用しているイスなのだが、「ローチェアはしっくりこない」という理由から持っていない。むしろ腰痛持ちの俺にはこんな感じの腰に優しいイスがちょうど良い。
Tradcanvas ポータブルダイニングチェア
LOGOS の同じモデルの色違い。嫁六の方が少し古いモデルだと思う。同じくアウトドアで使っているのだが、嫁六より子どもらの方がよく使っている(というか、席を奪われている)。
コールマンの謎イス
あ、はい。
嫁六がコカ・コーラの懸賞で当てたイス。2 つある。アウトドアでは元々このイスを使っていたのだが、懸賞品なので座り心地など一切確認を取っていないし、これらをメインに使っていた頃は当然のように子ども達に席を奪われていた。まぁ、快適なアウトドアライフを送れないので、新しくイスを購入することにした。
Fields の謎イス
ナフコで購入したイス。我が家で初めて買ったアウトドア用品でもある。これも 2 つある。元々は那珂川の花火大会観賞用に買ったもので、現在は公園などでサンシェードを設置してご飯を食べるときなどに使ったりする。直近ではディズニーランドのシンデレラのフェアリーテイル・ホール内で、雨に濡れた子どもの靴下を履き替えさせるために使った*1。
お気づきになっただろうか?
この記事を読んでいる人は実はやんちゃエフェクトを体験していたのである。先ほど載せたイスの写真は iPhone XS で撮影したものである。そして、俺の PC は elementary OS という Linux ディストリビューションを使っている。elementary OS 6*2では HEIC 形式の画像はデフォルトでは扱えない。その事には elementary OS を導入した初日から気付いていたが、
- Google ドライブに iPhone XS から写真をアップロードする
- elementary OS からブラウザで Google ドライブ上の HEIC 形式画像を表示する
- 2 で表示している画像を範囲指定のスクリーンショットで撮影する
という温かみのあることでやり過ごしてきた。が、いい加減めんどくさくなってきたので、ImageMagick で画像変換できるようにした。
HEIC 形式に対応した ImageMagick をソースビルドでインストールする
この見出し名を記事のタイトルにした方がいいのかもしれないけど、ほら、そしたら検索で引っかかっちゃうかもじゃん?そんなの不本意じゃん?詳しくは検索に強いキーワードを使うと恐いことなる件の回を参照してください。
主に以下のサイトを参考に進めていった。
elementary OS は Ubuntu 派生ディストリビューションなので、これで十分いけるはず。というか、大体いけた。
事前準備
インストール済みの ImageMagick を確認する。
$ identify -version $ convert -version $ mogrify -version
最初ノリで apt
で imagemagick
をインストールしたので、6.9 くらいがインストールされていたと思う。これをアンインストールする。
関連するパッケージをインストールする
先述のサイトに書いてあったので特に調べもせず、載っているがままに従った。先にネタバレをすると checkinstall
はインストールしなくてもいいと思われ。
$ sudo apt update $ sudo apt install build-essential checkinstall
これが何のために必要なのか分からんが、HEIC 形式に対応するには必要な手順らしいので、載っているがままに従った*3。
$ sudo apt build-dep imagemagick
HEIC 形式に対応するためのパッケージをインストールする
これも載っているがままにインストールした。
$ sudo apt install libwebp-dev libopenjp2-7-dev librsvg2-dev libde265-dev
なんか libopenjp とかバージョン上がってそうだけど、下位互換がちゃんとあるのか分からんので下手に挑戦はしていない。libwebp-dev とかはインストール済みだったりしたけども。
libheif をソースビルドでインストールする
これも載っているがままに従った。
$ git clone https://github.com/strukturag/libheif.git $ cd libheif $ ./autogen.sh $ ./configure $ make $ sudo make install
最新版の ImageMagick をソースビルドでインストールする
ここから少し変わる。先述のサイトでは wget
でソースコードを取得しているが、ImageMagick も GitHub にソースコードが公開されているので普通に git clone
した。
$ git clone https://github.com/ImageMagick/ImageMagick.git
んで、ImageMagick ディレクトリが出来るので、そこに移動して同じ手順をやった。
$ cd ImageMagick $ ./configure
実行するとこんな感じのログを出力する。
(略) ============================================================================== ImageMagick 7.1.0-19 is configured as follows. Please verify that this configuration matches your expectations. Host system type: x86_64-pc-linux-gnu Build system type: x86_64-pc-linux-gnu Option Value ------------------------------------------------------------------------------ Shared libraries --enable-shared=yes yes Static libraries --enable-static=yes yes Build utilities --with-utilities=yes yes Module support --with-modules=no no GNU ld --with-gnu-ld=yes yes Quantum depth --with-quantum-depth=16 16 High Dynamic Range Imagery --enable-hdri=yes yes Install documentation: yes Memory allocation library: JEMalloc --with-jemalloc=no no TCMalloc --with-tcmalloc=no no UMem --with-umem=no no Delegate library configuration: BZLIB --with-bzlib=yes yes Autotrace --with-autotrace=no no DJVU --with-djvu=yes yes DPS --with-dps=yes no FFTW --with-fftw=no no FLIF --with-flif=yes no FlashPIX --with-fpx=yes 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 JBIG --with-jbig=yes yes JPEG v1 --with-jpeg=yes yes JPEG XL --with-jxl=no no LCMS --with-lcms=yes yes LQR --with-lqr=yes yes LTDL --with-ltdl=no no LZMA --with-lzma=yes yes Magick++ --with-magick-plus-plus=yes yes OpenEXR --with-openexr=yes yes OpenJP2 --with-openjp2=yes yes PANGO --with-pango=yes yes PERL --with-perl=no no PNG --with-png=yes yes RAQM --with-raqm=yes no RAW --with-raw=yes no RSVG --with-rsvg=no no TIFF --with-tiff=yes yes WEBP --with-webp=yes yes WMF --with-wmf=no no X11 --with-x= yes XML --with-xml=yes yes ZIP --with-zip=yes no ZLIB --with-zlib=yes yes ZSTD --with-zstd=yes no Delegate program configuration: GhostPCL None pcl6 (unknown) GhostXPS None gxps (unknown) Ghostscript None gs (9.50) Font configuration: Apple fonts --with-apple-font-dir=default Dejavu fonts --with-dejavu-font-dir=default none Ghostscript fonts --with-gs-font-dir=default /usr/share/fonts/type1/gsfonts/ URW-base35 fonts --with-urw-base35-font-dir=default none Windows fonts --with-windows-font-dir=default none X11 configuration: X_CFLAGS = X_PRE_LIBS = -lSM -lICE X_LIBS = X_EXTRA_LIBS = Options used to compile and link: PREFIX = /usr/local EXEC-PREFIX = /usr/local VERSION = 7.1.0-19 CC = gcc CFLAGS = -I/usr/include/libxml2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/OpenEXR -I/usr/include/lqr-1 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/openjpeg-2.3 -I/usr/local/include -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -pthread -fopenmp -Wall -g -O2 -mtune=amdfam10 -fexceptions -pthread -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16 CPPFLAGS = -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16 PCFLAGS = DEFS = -DHAVE_CONFIG_H LDFLAGS = LIBS = -ljbig -llcms2 -ltiff -lfreetype -ljpeg -llqr-1 -lglib-2.0 -lpng16 -lz -ldjvulibre -lfontconfig -lfreetype -L/usr/local/lib -lheif -lwebpmux -lwebpdemux -lwebp -lwebp -lXext -lXt -lSM -lICE -lX11 -llzma -lbz2 -lIlmImf -lImath -lHalf -lIex -lIexMath -lIlmThread -lpthread -lopenjp2 -lpangocairo-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lharfbuzz -lcairo -lxml2 -lz -lm -lpthread CXX = g++ CXXFLAGS = -pthread FEATURES = DPC HDRI Cipher OpenMP DELEGATES = bzlib djvu fontconfig freetype heic jbig jng jpeg lcms lqr lzma openexr openjp2 pango png ps tiff webp x xml zlib ==============================================================================
で、HEIC 形式に対応しているかは Delegate library configuration の --with-heic
で判断するらしい。--with-heic
が yes になっていたら大丈夫らしい。
続いて make
を実行する。
$ make (中略) cp -f MagickCore/ImageMagick.pc MagickCore/ImageMagick-7.Q16HDRI.pc cp -f MagickCore/MagickCore.pc MagickCore/MagickCore-7.Q16HDRI.pc cp -f MagickWand/MagickWand.pc MagickWand/MagickWand-7.Q16HDRI.pc cp -f Magick++/lib/Magick++.pc Magick++/lib/Magick++-7.Q16HDRI.pc make[1]: ディレクトリ '/home/jinroq/tools/ImageMagick' から出ます
で、先述のサイトでは checkinstall
を実行しているが、これが全然解決できなかった。
checkinstall
を実行して失敗するその 1
pkg-deb: エラー: ファイル '/var/tmp/tmp.RfPe4ZMYWK/package/DEBIAN/control' を解析。7 行目付近、パッケージ 'imagemagick': 'Version' field value '7.1.0-%{Patchlevel}': リビジョン番号に無効な文字があります
checkinstall
を実行して失敗するその 2
dpkg-deb: エラー: ファイル '/var/tmp/tmp.OMsRSxy6lS/package/DEBIAN/control' を解析。8 行目付近、パッケージ 'imagemagick': `Depends' フィールド、無効なパッケージ名 `%{name}-libs%{?_isa}': 英数字の文字で始まらなければなりません
checkinstall
を実行すると以下のような設定 CLI が表示される
(略) : このパッケージは以下の内容で構成されます: 0 - Maintainer: [ root@ThinkPadE15Gen3adacf9d8 ] 1 - Summary: [ Use ImageMagick to convert, edit, or compose bitmap images in a variety of formats. In addition resize, rotate, shear, distort and transform images. Library links and header files for ImageMagick application development ImageMagick libraries to link with DjVu plugin for ImageMagick ImageMagick HTML documentation ImageMagick perl bindings ImageMagick Magick++ library (C++ bindings) C++ bindings for the ImageMagick library ] 2 - Name: [ imagemagick ] 3 - Version: [ 7.1.0 ] 4 - Release: [ %{Patchlevel} ] 5 - License: [ GPL ] 6 - Group: [ checkinstall ] 7 - Architecture: [ amd64 ] 8 - Source location: [ ImageMagick ] 9 - Alternate source location: [ ] 10 - Requires: [ %{name}-libs%{?_isa} = %{version}-%{release} %{name}%{?_isa} = %{version}-%{release} %{name}-libs%{?_isa} = %{version}-%{release} %{name}-libs%{?_isa} = %{version}-%{release} %{name}-libs%{?_isa} = %{version}-%{release} perl( %{name}-libs%{?_isa} = %{version}-%{release} %{name}-c++%{?_isa} = %{version}-%{release} %{name}-devel%{?_isa} = %{version}-%{release} ] 11 - Recommends: [ ] 12 - Suggests: [ ] 13 - Provides: [ imagemagick ] 14 - Conflicts: [ ] 15 - Replaces: [ ]
どうもこれの %{...} を全て手動で設定しなければならなそうで、「さすがに依存パッケージの名前とか手動で設定するの無理じゃね?」と思った。
で、「なんで checkinstall
しないといけないんだっけ?」と思ったら、先述のサイトでは「sudo apt remove
でパッケージを削除できるようになる」とあった。
…make uninstall
があるから別にいらねーな。というか、ソースビルドしてんだから apt
とかいらねーじゃん。というわけでビルド手順に書いてある通りに従った。
$ sudo make install
で、これでインストールされたかと思いきや、期待通りに動いてくれない
$ convert -version convert: error while loading shared libraries: libMagickCore-7.Q16HDRI.so.10: cannot open shared object file: No such file or directory
オブジェクトファイルがないらしい。ぐぐったら以下にたどり着いた。
ldconfig
を実行するものらしい。これは先述のサイトに載っていたし、なんなら本家サイトにも載っていた。
$ sudo ldconfig
一応確認。
$ convert -v Version: ImageMagick 7.1.0-19 Q16-HDRI x86_64 2021-12-18 https://imagemagick.org Copyright: (C) 1999-2021 ImageMagick Studio LLC License: https://imagemagick.org/script/license.php Features: Cipher DPC HDRI OpenMP(4.5) Delegates (built-in): bzlib djvu fontconfig freetype heic jbig jng jp2 jpeg lcms lqr lzma openexr pangocairo png tiff webp x xml zlib Compiler: gcc (9.3) (以下略)
一応良さげ。
$ convert ~/ダウンロード/drive-download-20211218T055737Z-001/IMG_6802.HEIC ~/ダウンロード/drive-download-20211218T055737Z-001/IMG_6802.jpg
これで無事 HEIC 形式から jpg に変換できてブログにアップロードできたのである。めでたしめでたし。