Php 如何将存储在数据库中的十六进制图像转换为可见图像

Php 如何将存储在数据库中的十六进制图像转换为可见图像,php,php-7,Php,Php 7,上下文 我可以访问数据库。该数据库包含类似于0xFFD8FFE..09090 问题 我需要那些神秘的(十六进制)数据转换成可视图像。我找不到任何办法 我已经试过了 $image = base64_decode(file_get_contents('img.txt')); $db_img = imagecreatefromstring($image); Header("Content-type: image/jpeg"); imagepng($db_img); 这里img.txt是包含十六进制数

上下文 我可以访问数据库。该数据库包含类似于
0xFFD8FFE..09090

问题

我需要那些神秘的(十六进制)数据转换成可视图像。我找不到任何办法

我已经试过了

$image = base64_decode(file_get_contents('img.txt'));
$db_img = imagecreatefromstring($image);
Header("Content-type: image/jpeg");
imagepng($db_img);
这里
img.txt
是包含十六进制数据的文件名


它不起作用。如何实现这一点?

要将类似
0xFFD8FFE…09090的字符串转换为实际的二进制数据,需要首先去掉“0x”前缀,它不是实际数据的一部分,然后执行简单的十六进制操作→ 仓位转换:

$data   = '0xFFD8FFE...09090';  // maybe from file_get_contents
$binary = hex2bin(substr($data, 2));
如果您不知道它是什么类型的图像,那么最有效的方法可能是使用:


如果
$binary
已经是图像,则无需使用gd重新编码图像。您可能需要在这里检查一下
$type
,以确认它确实是您在盲目输出它之前所期望的文件类型。

它实际上是存储为文本“0xFF…”还是实际上是二进制数据?另外,base 64和hex是完全不同的东西…png也不是jpeg。实际上我还没有保存数据。我只是可以访问数据库,我有上面提到的数据格式。我不知道它是什么类型(jpg或png)的图像。hexa代码在数据库中存储为
text
。所以它实际上是字母0,X,Eff,Eff…你正在处理的,是吗?嗯,看起来像。但这里我认为0x表示它是六面体。除了第二个位置的x之外,F没有转发的字母。这需要澄清。无论你用什么来查看数据,都只是以这种格式向你显示二进制数据,还是实际上是那些ASCII字母?
$finfo = new finfo(FILEINFO_MIME);
$type  = $finfo->buffer($binary);

header('Content-Type: ' . $type);
echo $binary;