上下文
我有权访问数据库。该数据库包含类似0xFFD8FFE....................09090
问题
我需要将那些神秘(十六进制)数据转换为可视图像。我无法找到任何办法。
我试过
$image = base64_decode(file_get_contents('img.txt'));
$db_img = imagecreatefromstring($image);
Header("Content-type: image/jpeg");
imagepng($db_img);
此处img.txt
是包含十六进制数据的文件名。
它不起作用。我怎样才能做到这一点?
答案 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
以确认它是否真的是您在盲目输出之前所期望的那种文件。