PHPでPNGをWebPに変換しようとしたら警告「imagewebp(): Palette image not supported by webp」が出て変換できない

2019年2月10日IT関連,PHP備忘録

gdで読み込んだPNGからWebPへの出力処理がこけていたのでログを見てみたら「PHP Warning: imagewebp(): Palette image not supported by webp」となっていました。

環境

OSCentOS7
PHP7.2.13
GD library Version2.2.5

問題のコード

処理は簡略化しています。

<?php
$path = "ファイルパス";
$src = imagecreatefrompng($path);
imagewebp($src);

原因

gdライブラリのソースコードを見る限りWebPへの変換では変換元の画像がTrueColorである必要があるみたいですね。

static int _gdImageWebpCtx (gdImagePtr im, gdIOCtx * outfile, int quality)
{
	uint8_t *argb;
	int x, y;
	uint8_t *p;
	uint8_t *out;
	size_t out_size;
    int ret = 0;

	if (im == NULL) {
		return 1;
	}

	if (!gdImageTrueColor(im)) {
		gd_error("Palette image not supported by webp");
		return 1;
	}

https://github.com/libgd/libgd/blob/master/src/gd_webp.c

修正したコード

TrueColorで画像を作成し、それに上書きすることで解消できました。

<?php
$path = "ファイルパス";
$src = imagecreatefrompng($path);
$dst = imagecreatetruecolor(imagesx($src),imagesy($src));
imagecopy($dst,$src,0,0,0,0,imagesx($src),imagesy($src));
imagewebp($dst);