gpt4 book ai didi

php - Laravel - 无法将存储在我的数据库中的 .png 图像作为 base64 编码字符串提供

转载 作者:行者123 更新时间:2023-12-04 19:28:26 25 4
gpt4 key购买 nike

我使用 HTML2Canvas 在我的页面上为 div 创建了一个 png 图像,它为图像创建了一个 base64 编码的字符串。我将它作为内联显示在页面上:

<img id="headerImage" src="data:image/png;base64,iVBORw0KGg..." width="60">

然后我将其作为 LONGTEXT 保存在我的数据库中。

在我的 Controller 中,我似乎无法将图像作为有效的 PNG 返回服务器。尝试了多种不同的方式,如代码片段所示:

                $imageStr = $plan->image;

$pos = strpos($imageStr, ',');
$trimmed = substr($imageStr, $pos+1);

$image = base64_decode($trimmed);

/*
$im = imagecreatefromstring($image);
if ($im !== false) {
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
} else {
echo 'Failed';
}

return;
*/

$response = Response::make(trim($image), 200);
$response->header('Content-Type', 'image/png');

return $response;

/*
return Response::stream(function() use ($image) {
echo $image;
}, 200, array('Content-Type:image/png'));
*/

当我查看标题时,它看起来很合理:

t=4102 [st=437]        HTTP_TRANSACTION_READ_RESPONSE_HEADERS
--> HTTP/1.1 200 OK
Date: Tue, 24 Feb 2015 16:36:28 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.5
Cache-Control: no-cache
Set-Cookie: [362 bytes were stripped]
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: image/png
t=4102 [st=437] -HTTP_TRANSACTION_READ_HEADERS

在所有情况下,浏览器都会显示损坏的图像符号。在这一点上我的智慧结束了 - 感谢任何关于如何做到这一点的想法!

最佳答案

您的代码应该可以正常工作。

关于 Base64 编码图像的注释;要再次解码它们,您必须删除字符串的 data:image/png;base64 部分。

所以:

<?php
$imageStr = $plan->image; // Or wherever you get your string from
$image = base64_decode(str_replace('data:image/png;base64,', '', $imageStr));

$response = Response::make($image, 200);
$response->header('Content-Type', 'image/png');

return $response;

此外,imagecreatefromstring 在这种情况下是多余的。

关于php - Laravel - 无法将存储在我的数据库中的 .png 图像作为 base64 编码字符串提供,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28701305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com