hero_picture

Amazon Linux 1でHEIC対応ImageMagickを構築する方法【PHP 5.5環境対応】

2025/01/13

こんにちは、クラウド事業部の倉岡です。

Amazon Linux 1 で HEIC 画像を扱いたいと思ったことはありませんか?標準パッケージだと対応していないため、自分で環境を構築する必要があります。本記事では、ImageMagick に HEIC サポートを追加する方法を解説します。gcc のバージョンアップから必要なライブラリのソースインストールまで、ステップバイステップで詳しくご紹介します。

本日は、Amazon Linux 1 環境において ImageMagick で HEIC 形式の画像を扱えるようにする手順をご紹介します。Amazon Linux 1 にはミドルウェアパッケージがほとんど用意されていないため、gcc のバージョンアップや必要なライブラリのソースインストールを行います。

環境情報

  • OS: Amazon Linux 1
  • PHP: 5.5
  • ImageMagick: 6.9.10-97(ソースからインストール)

事前準備

適当にheicファイル作成して用意しておきます。今回はtest2.heicを用意しました。

作業手順

1. GCC のバージョンアップ

Amazon Linux 1 のデフォルトの gcc は古いため、最新の gcc 10.4.0 にアップグレードします。これにより、HEIC 形式の画像を扱うために必要な最新ライブラリをビルドできるようになります。

コマンド説明

  • wget:指定した URL からファイルをダウンロードします。
  • tar -xvzf:ダウンロードした tar.gz ファイルを解凍します。
  • ./contrib/download_prerequisites:ビルドに必要な依存関係を取得します。
  • ../configure --enable-languages=c,c++ --disable-multilib:C と C++ 言語のサポートを有効にして、マルチライブラリサポートを無効化します。
1wget http://ftp.gnu.org/gnu/gcc/gcc-10.4.0/gcc-10.4.0.tar.gz
2tar -xvzf gcc-10.4.0.tar.gz
3cd gcc-10.4.0
4./contrib/download_prerequisites
5mkdir build
6cd build
7../configure --enable-languages=c,c++ --disable-multilib
8make -j$(nproc)
9make install
10

確認

gccg++ のバージョンが 10.4.0 に更新されているか確認します。

1gcc --version
2g++ --version
3

出力結果:

1gcc (GCC) 10.4.0
2g++ (GCC) 10.4.0
3

2. CMake のバージョンアップ

古いバージョンの CMake は対応していないため、ソースから最新の CMake をインストールします。

コマンド説明

  • yum remove cmake -y:既存の CMake を削除します。
  • wget:CMake の最新バージョンをダウンロードします。
  • ./bootstrap:ビルドの前準備を行います。
1yum remove cmake -y
2wget https://github.com/Kitware/CMake/releases/download/v3.27.6/cmake-3.27.6.tar.gz
3tar -xvzf cmake-3.27.6.tar.gz
4cd cmake-3.27.6
5./bootstrap
6make
7sudo make install
8

確認

1cmake --version
2

出力結果:

1cmake version 3.27.6
2

3. libheif と libde265 のインストール

ImageMagick が HEIC 形式をサポートするために、HEIC のエンコード・デコードをサポートするライブラリである libheif と、そのバックエンドである libde265 をインストールします。

libheif のインストール

libheif は、HEIF ファイル形式の処理を提供するライブラリです。

1git clone https://github.com/strukturag/libheif.git
2cd libheif/
3mkdir build
4cd build
5cmake -DCMAKE_C_COMPILER=/usr/local/bin/gcc -DCMAKE_CXX_COMPILER=/usr/local/bin/g++ ..
6make
7make install
8

libde265 のインストール

libde265 は、HEVC(H.265)形式のデコーダライブラリです。

1git clone https://github.com/strukturag/libde265.git
2cd libde265
3mkdir build
4cd build
5cmake ..
6make
7make install
8

確認

インストールしたライブラリのバージョンを確認します。

1pkg-config --modversion libheif
2pkg-config --modversion libde265
3

出力結果:

1libheif 1.19.5
2libde265 1.0.15
3

4. ImageMagick のインストール

次に、ImageMagick をソースからインストールし、HEIC サポートを有効化します。ImageMagick は画像の変換や加工を行うツールです。

コマンド説明

  • wget:ImageMagick のアーカイブをダウンロードします。
  • export PKG_CONFIG_PATH:インストールしたライブラリのパスを環境変数に設定します。
  • ./configure --with-heic=yes:HEIC のサポートを有効にしてコンパイルします。
1wget https://download.imagemagick.org/archive/releases/ImageMagick-6.9.10-97.tar.xz
2tar -xvJf ImageMagick-6.9.10-97.tar.xz
3cd ImageMagick-6.9.10-97
4export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
5./configure --with-heic=yes
6make
7yum remove ImageMagick
8make install
9

確認

1convert --version
2

出力結果:

1Version: ImageMagick 6.9.10-97 Q16 x86_64
2Delegates (built-in): bzlib fontconfig freetype heic jng jpeg lcms lzma png tiff x xml zlib
3

5. テストスクリプトの作成

PHP を使って HEIC 画像を JPEG に変換するテストスクリプトを作成します。

スクリプトの内容

以下のスクリプトは、コマンドライン引数で受け取った HEIC 画像を JPEG に変換します。

convert_heic.php

1<?php
2if ($argc < 3) {
3    echo "Usage: php convert_heic.php input.heic output.jpg\n";
4    exit(1);
5}
6
7$input = $argv[1];
8$output = $argv[2];
9
10try {
11    $imagick = new Imagick($input);
12    $imagick->setImageFormat('jpeg');
13    $imagick->writeImage($output);
14    echo "Converted $input to $output successfully.\n";
15} catch (Exception $e) {
16    echo "Error: " . $e->getMessage() . "\n";
17}
18?>
19

テスト実行

作成したスクリプトを実行し、変換が成功するか確認します。

1php convert_heic.php test2.heic test2.jpg
2

出力結果:

1Converted test2.heic to test2.jpg successfully.
2

ファイル確認

変換後のファイルを確認します。

1file test2.heic
2file test2.jpg
3

出力結果:

1test2.heic: ISO Media
2test2.jpg: JPEG image data
3

これで、HEIC 形式の画像を ImageMagick を使って JPEG に変換する環境が整いました。

お困りの方ぜひ試してみてください。