如何将db中存储的图像转换为十六进制为可见图像

时间:2017-08-16 10:47:19

标签: 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是包含十六进制数据的文件名。

它不起作用。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

要将像0xFFD8FFE...09090这样的字符串转换为实际的二进制数据,您需要首先摆脱" 0x"前缀,它不是实际数据的一部分,然后执行简单的hex→bin转换:

$data   = '0xFFD8FFE...09090';  // maybe from file_get_contents
$binary = hex2bin(substr($data, 2));

如果你不知道它是什么类型的图像,找出最有效的方法可能是使用finfo

$finfo = new finfo(FILEINFO_MIME);
$type  = $finfo->buffer($binary);

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

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