PHPでPNGをWebPに変換しようとしたら警告「imagewebp(): Palette image not supported by webp」が出て変換できない
gdで読み込んだPNGからWebPへの出力処理がこけていたのでログを見てみたら「PHP Warning: imagewebp(): Palette image not supported by webp」となっていました。
Contents
環境
OS | CentOS7 |
PHP | 7.2.13 |
GD library Version | 2.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);
ディスカッション
コメント一覧
まだ、コメントがありません