问题描述
我正在使用 endroid/qr-code https://github.com/endroid/qr-code
来生成 QrCode。
现在我也需要将此二维码发送到我的电子邮件中。
我使用了以下代码:
$result = Builder::create()
->writer(new PngWriter())
->writerOptions([])
->data("This ist test page.")
->encoding(new Encoding('UTF-8'))
->size(200)
->margin(10)
->roundBlockSizeMode(new RoundBlockSizeModeMargin())
->logoPath($webPath)
->labelText('SCAN')
->build();
return $result->getDataUri();
<img src = {{ $return_from_result_getDataUri }} >
我从上面那条线弄坏了 img。
当我使用 {{ $return_from_result_getDataUri }} 时,这会显示 data:image/png;base64.....
文本。
有人能帮我吗。
谢谢。
解决方法
对在电子邮件中嵌入带有数据 URI 的图像的支持仍然不是最佳的,而且许多电子邮件客户端根本不支持它。
请参阅 this analysis from Campaign Monitor 显示许多客户端未呈现数据 URI 图像。
强烈建议您将二维码上传到某个地方,然后将其链接为普通图片。
如果您的服务托管在 AWS 上,则可以使用 S3。
否则您可以使用免费服务,但我对它们没有任何经验。这是我找到的第一个结果:https://apidocs.imgur.com/
PS:只是补充一点,您的代码中可能还缺少一些双引号。
<img src="{{ $return_from_result_getDataUri }}" >
,
<img src = {{ $return_from_result_getDataUri }} >
在PHP中,我们将上面写成如下
<img src="<?php echo $return_from_result_getDataUri; ?>" >
但这可能不适用于所有电子邮件客户端。有两种方法可以解决这个问题。
方法一: 正如安德里亚提到的,将文件保存在某处
$result->saveToFile(`__DIR__`.'/qrcode.png');
然后使用 html img 标签中的 url。
<img src="<?php echo $fullImageUrl; ?>">
方法二: 将图像作为附件嵌入并使用 cid(content id) 引用它
这很好解释here