kait0401
@kait0401

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

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

No Answers yet.

Your answer might help someone💌