COMPANY SERVICE STAFF BLOG NEWS CONTACT

STAFF BLOG

スタッフブログ

TECHNICAL

テクログ

2022.11.02

特定ディレクトリ配下のアニメーションgifのアニメーション付きwebpを生成するためのPHPスクリプト

テクログphp

## 最終的にやること

特定のディレクトリ配下にあるアニメーション 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 にしてもファイル容量が必ず減る訳ではありません。

この記事を書いた人

インドア

入社年2017年

出身地埼玉県

業務内容開発

特技・趣味映画・アニメ鑑賞、ゲーム、散歩、勉強

テクログに関する記事一覧

TOP