我正面临一个无法用Google搜索的问题,所以我绝望地转向你。
我的意思是从旧的自编知识数据库中恢复图像(用PHP编写,公司内部)。这些图像不久前不再需要了,加载它们的每个具体实现都已被删除,因为它已经过时了;只是文件仍然存在,现在我的部分是让他们回来检查我们还需要什么。
编写该构造的地下室的人现在已经很久了,所以没有人能问我......
图像作为文件存储在服务器的硬盘(而不是数据库)中,但不是简单的图像!它们以某种方式加密,我无法解决它们加密的方式......但也许这不是必要的......
我构建了一些沙箱来确定图片加载器类的方法是如何工作和反应的,以及它们通过分析我发现的帮助程序类来回复它们。
所以我想出了这个:
$ih = new DrImageHelper();
$ih->setImgStore('/home/mic/copy/encrypted_imgs/'); // this dir contains the stange encrypted image files
$imgs = $ih->getImages(DrImageHelper::TYPE_DIAGRAM, 90);
$img_code = DrImageHelper::getImageCode($imgs[0]);
print_r($img_code);
(我不指望你告诉我代码/用法是否正确,没有人可以告诉我,因为它的公司自编的类构造)
返回类似于:
的内容/ 9J / 4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP / sABFEdWNreQABAAQAAAA2AAD / 4QMZaHR0cDovL25zLmFkb2JlLmNvbS94YXA
(这只是一小部分)
我不太确定这应该是什么以及如何处理它,但似乎这是唯一的/可能是正确的顺序我可以使用类方法来获得结果..它花了我几个小时来组合方法调用没有任何成功..上面是唯一没有崩溃致命的片段并返回结果......
getImageCode方法的注释告诉: "返回要打印的解密的基本编码字符串"
有人能想象这可能意味着什么吗?
有没有人知道这种格式或如何打印它/从中重新获得图像?
图像真的可以以这种(非常长的)文本字符串的形式输出吗?
答案 0 :(得分:1)
我曾经在做类似的事情......
就像在评论中已经说过的那样,我也认为这只是一个基础(32或64)编码的字符串(也是根据你在方法中找到的评论)。所以基本上,如果是这样,你甚至不需要考虑它的二进制或幕后的任何东西......
因为猜测周围没什么意义,我建议尝试使用以下部分代码:
$img_string = base64_decode($img_code); // use the var that contains the image code returned by DrImageHelper::getImageCode() here..
print_r($img_string);
如果你看到某些东西,可能表示一个典型的图片标题(包含类似“PNG”或“JPG”和一些纯文本描述或其他东西),你是正确的方式,可能会尝试简单地创建一个图像这个字符串使用:
$im = imagecreatefromstring($img_code);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
(这与上面提到的代码无关,应该寂寞到另一个脚本中)
备注:为此需要一个单独的脚本只包含上面的第二个片段,因为有一行在其中设置要发送的标题类型...
现在在浏览器中打开该脚本(由apache / php提供)...如果一切正常,你现在应该看到你的图片,而不是更奇怪的代码。
要在您的网页中使用此解密图片,您可以将该php脚本加载为图像。这是有效的,因为脚本会告诉它属于哪种mime类型。因此,假设上面的第二个片段被复制到名为“picture_decrypter.php”的脚本中执行此操作:
<img src="picture_decrypter.php" alt="" />