phpspreadsheetでbase64の画像を貼り付けたい。
やりたいこと
phpspreadsheetにbase64画像を貼り付けたい。
base64のデコード方法またはexcelにbase64の画像の貼り方をお聞きしたいです。
PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing();
は画像のリンクを画像にしてexcelに貼り付けてくれます。
普通の画像リンクでは成功しているのですが、base64のリンクだと対応していないみたいです。
base64のリンクは下記のような感じです。
data:image/jpeg;base64,1234567890
試したこと
base64だと失敗するので、まずデコードしてみました。
controller.php
$url = "data:image/jpeg;base64,1234567890";
$url = explode("data:image/jpeg;base64,$url);
$image = base64_decode($url);
echo $image;
まずここで文字化けしました。。
そしてとりあえず
controller.php
$image = imagecreatefromstring($image);
echo $image;
ここでfalseが返って来ます。。
ちなみにimagecreatefrompngやjpegも試しました。
試したこと2
base64を直接記入しました。
controller.php
use PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing;
$url = "data:image/jpeg;base64,1234567890";
$drawing->setDescription('img01');
$drawing->setImageResource($url);
$drawing->setRenderingFunction(MemoryDrawing::RENDERING_PNG);
$drawing->setMimeType(MemoryDrawing::MIMETYPE_DEFAULT);
$drawing->setCoordinates('A4');
$drawing->getShadow()->setVisible(true);
$drawing->setHeight(320);
$drawing->setWorksheet($spreadsheet->getActiveSheet());
シートには反映されていませんでした。。
setRenderingFunction(MemoryDrawing::RENDERING_PNG);の部分もすべての形式を試しました。
またhttpの画像は成功します。
詳しくはわかりませんが、デコードしても画像が存在しないのかと思っているのでMemoryDrawingでbase64を貼り付けた方がいいのかなと考えています。
どなたかどうぞよろしくお願い致します。
解決
2日ほど悩みましたが自己解決しました。
$data = base64_decode(explode(',', $image_url)[1]);
$drawing->setDescription('e-img01');
$drawing->setImageResource(imagecreatefromstring($data));
$drawing->setRenderingFunction(MemoryDrawing::RENDERING_JPEG);
$drawing->setMimeType(MemoryDrawing::MIMETYPE_DEFAULT);
$drawing->setCoordinates('A4');
$drawing->getShadow()->setVisible(true);
$drawing->setHeight(320);
$drawing->setWorksheet($spreadsheet->getActiveSheet());
原因は分かりませんが、とりあえず成功しました。
base64なども詳しく理解しないとですね。。
今後の自分の為にこの質問は残しておきますw
2