2022.11.02
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ
## 最終的にやること
特定のディレクトリ配下にあるアニメーション gif のアニメーション付き webp ファイルを生成します。
## 実行環境
OS:
エディション Windows 10 Pro
バージョン 21H2
インストール日 2021/03/10
OS ビルド 19044.2130
エクスペリエンス Windows Feature Experience Pack 120.2212.4180.0
PHP:
$ php -v
PHP 7.4.16 (cli) (built: Mar 2 2021 14:06:15) ( ZTS Visual C++ 2017 x64 )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
Git for Windows:
$ git version
git version 2.35.1.windows.2
## 準備
### `libwebp-1.2.4-windows-x64` をダウンロード
画像を webp に変換するツールを以下からダウンロードします。
※1 https://storage.googleapis.com/downloads.webmproject.org/releases/webp/index.html
下の方に行くほど最新になっています。この記事では以下をダウンロード&解凍します。
`libwebp-1.2.4-windows-x64.zip 2022-08-06T02:22:39Z 3.56MiB`
#### ※1 リンクの遷移元
https://storage.googleapis.com/downloads.webmproject.org/releases/webp/index.html
このページは以下のサイトの「ダウンロード リポジトリ」からのリンクから遷移できます。
https://developers.google.com/speed/webp/docs/using
> これらのファイルは、ダウンロード リポジトリからダウンロードするか、ソースからビルドできます。
## PHPスクリプト
特定のディレクトリ配下にあるアニメーション gif のアニメーション付き webp ファイルを生成する PHP スクリプトを以下に記載します。ディレクトリのパスは本記事用に調整しています。
<?php
function main() {
exec('find /c/Users/indoor/workspace/example -name \'*.gif\'', $animation_gif_list);
foreach ($animation_gif_list as $gif) {
$info = pathinfo($gif);
// gif2webp.exe を実行するためにパスを置換する /c/ => C:/
$input_direname = preg_replace('/^\/c\//', 'C:/', $info['dirname']);
$input = $input_direname.'/'.$info['filename'].'.'.$info['extension'];
$out_name = $input_direname.'/'.$info['filename'].'.webp';
if (file_exists($out_name)) {
continue;
}
exec("C:\Users\indoor\Desktop\libwebp-1.2.4-windows-x64\bin\gif2webp.exe {$input} -o {$out_name}");
}
}
main();
## 実行
### 実行前のアニメーション gif があるディレクトリ
以下で確認できる `example1.gif` などの gif に対応する webp ファイルを生成します。
example
|--dir1
| |--dir1
| | |--example1.gif
| | |--example2.gif
| | |--example3.gif
| |--dir2
| | |--example1.gif
| | |--example3.gif
|--dir2
| |--dir1
| | |--example2.gif
| |--dir2
| |--dir3
| | |--dir1
| | |--dir2
| | | |--example1.gif
| | | |--example3.gif
### 実行
indoor@86DJX93 MINGW64 ~/workspace/tools/アニメーションGIFをアニメーションWEBPにする
$ php a.php
Saved output file (174290 bytes): C
Saved output file (942352 bytes): C
Saved output file (1632348 bytes): C
Saved output file (174290 bytes): C
Saved output file (1632348 bytes): C
Saved output file (942352 bytes): C
Saved output file (174290 bytes): C
Saved output file (1632348 bytes): C
### 実行前のアニメーション gif があるディレクトリ
各ディレクトリにある `example1.gif` などに対応する `example1.webp` などが生成されているのが確認できます。 `example1.webp` をダブルクリックすると windows のフォトビューワーではなく chrome が起動されました。
example
|--dir1
| |--dir1
| | |--example1.gif
| | |--example1.webp
| | |--example2.gif
| | |--example2.webp
| | |--example3.gif
| | |--example3.webp
| |--dir2
| | |--example1.gif
| | |--example1.webp
| | |--example3.gif
| | |--example3.webp
|--dir2
| |--dir1
| | |--example2.gif
| | |--example2.webp
| |--dir2
| |--dir3
| | |--dir1
| | |--dir2
| | | |--example1.gif
| | | |--example1.webp
| | | |--example3.gif
| | | |--example3.webp
## 終わり
以上です。
ちなみに webp にしてもファイル容量が必ず減る訳ではありません。