5

私はJPGにデコードしたいこのBase64 PNGを持っています。PNG に変換すると、次を使用して正常に動作します。

list($type, $data) = explode(';', $data);
list(, $data)      = explode(',', $data);
$data = base64_decode($data);
file_put_contents('myDirectory/filename.png', $data);

しかし、JPGで保存しようとすると、( )を使って白黒になってしまいMyDirectory/filename.jpgます。

どうすればJPGに変換できますか? これが私の Base64 PNG の例です。

data:image/png;base64,iVBORw0KGgoAAAANSUhE...
4

2 に答える 2

9

Base64 は、データを転送可能なテキスト形式に変換するために厳密に使用されるエンコード形式です。別の形式が必要な場合は、そのエンコーディング形式にあるものはすべて、さらに変換する必要があります。したがって、PNG を JPEG にしたい場合は、Base64 デコード後に別のツールで JPEG に変換する必要があります。 このスレッドにはいくつかの良い提案があります。スレッドに回答する @Andrew Moore は、このような関数の使用を推奨しています。PHP セットアップの一部として GD ライブラリがインストールされていることを確認してください。

// Quality is a number between 0 (best compression) and 100 (best quality)
function png2jpg($originalFile, $outputFile, $quality) {
    $image = imagecreatefrompng($originalFile);
    imagejpeg($image, $outputFile, $quality);
    imagedestroy($image);
}

コードを例として使用すると、この関数を使用して次のことができます。

png2jpg('myDirectory/filename.png','myDirectory/filename.jpg', 100);

または、その関数の関数を分解して、png2jpg次のようにコードで使用できます。

list($type, $data) = explode(';', $data);
list(, $data)      = explode(',', $data);
$data = base64_decode($data);
file_put_contents('myDirectory/filename.png', $data);
$image = imagecreatefrompng('myDirectory/filename.png');
imagejpeg($image, 'myDirectory/filename.jpg', 100);
imagedestroy($image);
于 2013-01-25T02:58:32.357 に答える