如何动态设置数据:图像/文件类型?

Posted

技术标签:

【中文标题】如何动态设置数据:图像/文件类型?【英文标题】:How do I set data:image/ filetype dynamically? 【发布时间】:2021-12-29 11:19:31 【问题描述】:

我有一个数据库,其中包含保存为BLOBs 的图像。我可以像这样在页面上成功使用图像:

<img src="<?php echo 'data:image/jpeg;base64,'.base64_encode($image)?>"  >

但是,这需要在data:image/jpeg; 的实际语句中手动设置文件扩展名。问题是我有很多不同格式的图像。我想确保根据每个图像的特定文件的实际文件扩展名正确设置文件类型。我已经有一个嵌套数组,其中包含这些文件的所有文件扩展名。

不过,我在动态设置扩展时遇到了麻烦。我尝试简单地将'' 单引号替换为"",以便我可以轻松地在语句中使用变量,如下所示:

<img src="<?php echo "data:image/$images['monitor']['extension'];base64,".base64_encode($image)?>"  >

这不起作用,因为我相信src 标签本身已经包含双引号。我的 IDE 告诉我一个错误 Cannot use '[]' for reading。我也尝试过使用连接单引号:

<img src="<?php echo 'data:image/' . $images['monitor']['extension'] . ';base64,'.base64_encode($image)?>"  >

这也不起作用。我自己无法在网上找到任何解决方案。有没有办法动态设置文件扩展名?虽然为每个图像设置jpeg 大多是有效的,例如为image/x-ico 选项卡图标这样做会导致图像无法正确加载。

【问题讨论】:

后面代码 sn-p 的语法应该可以正常工作。如果您没有得到想要的结果 - 那么您的变量可能没有包含您认为它们应该包含的内容。 不,使用 that 您只会收到一条错误消息 :-) 现在有问题的图像是哪种类型,jpeg 还是 png?您正在将 base64 编码应用于 $image- 该变量与 $images['monitor']['extension'] 之间的关系是什么? 我所说的具体图像是PNG。 $image 变量是一个 BLOB,其中包含 BLOB 图像的 base64 字符串。 $images 变量是一个数组,其中包含每个图像的信息,例如 array(monitor => array(date => '28.01.2021', extension => 'png'), phone => array(date => '29.01. 2021', 扩展名 => 'jpg')); “$image 变量是一个 BLOB,其中包含 BLOB 图像的 base64 字符串。” - 如果确实如此,那么您将使用 base64 对其进行编码base64_encode($image) 而对于extension =&gt; 'jpg',它可能无法正常工作,因为JPG 图像的正确 mime 类型是image/jpeg,而不是image/jpg,请参阅***.com/q/33692835/1427878 【参考方案1】:

假设BLOB包含图像的实际二进制数据。

只需确保扩展名与所需语法匹配

jpg 文件:

png 文件:

ico 文件:

所以一个示例如下所示:

<?php
$image=file_get_contents("http://www.createchhk.com/SO/sample1.png");

$file_ext = 'png';
?>

Test for PNG<br>
<img src="data:image/<?php echo $file_ext; ?>;base64,<?php echo base64_encode($image)?>"  ><br>


<?php
$image2=file_get_contents("http://www.createchhk.com/SO/sample1.jpg");
$file_ext2 = 'jpeg';
?>


Test for JPG<br>
<img src="data:image/<?php echo $file_ext2; ?>;base64,<?php echo base64_encode($image2)?>"  ><br>

<?php
$image3=file_get_contents("http://www.createchhk.com/SO/sample1.ico");
$file_ext3 = 'icon';
?>


Test for JPG<br>
<img src="data:image/<?php echo $file_ext3; ?>;base64,<?php echo base64_encode($image3)?>"  ><br>

结果可以在这里看到:

http://www.createchhk.com/SO/testSO_18Nov2021.php

【讨论】:

这成功了!我已将 data:image/ 和 ;base64 移动到 html 而不是 echo 并且图像确实加载了!谢谢!

以上是关于如何动态设置数据:图像/文件类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vue 中删除图像时使输入类型文件为空?

如何将图像文件加载到 ImageView?

在 laravel 刀片模板中动态更改每个用户的背景图像

.NET 图像处理程序在下载时剥离文件类型

java内部如何将任何类型的文件(图像,pdf等)转换为bytearray?

UIButton 背景图片可以支持动态类型吗?