我从(https://github.com/KeejOow/eidlib)使用eID读卡器SDK,它工作得很好。
使用SDK,它允许我读取我的身份证详细信息,但我需要读取图片,所以我得到这个哈希图片值使用SDK。
Hash picture: *P¿xxxxxxxxx
public function removemeoncetestedAction() {
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender();
//$this->_response->setHeader('Access-Control-Allow-Origin', '*');
$this->db = Application_Model_Db::db_load();
$sql = "select *From idcard order by id desc limit 1";
$cresult = $this->db->fetchAll($sql);
if(count($cresult) > 0) {
$arr = explode("'n", $cresult[0]['card']);
$encodedPhoto = base64url_decode($arr[18]); // Hash picture
//header('Content-Type: image/jpeg');
echo "<img src='{$encodedPhoto}' />";
}
exit;
}
我怎么能从这个哈希字段得到真正的图片png, jpeg?当我执行上面的代码时,我根本没有得到任何图像预览。
你的方法不会工作,因为你已经把二进制图像数据在你的<img>
src
属性,其中浏览器期望看到一个URL。您需要提供一个URL,浏览器可以从中获取图像。
有一种简单的方法可以很好地处理小图像:一个Data URI。
你可以像这样嵌入base64编码的图像(这个例子给出了一个红点):
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />
(这个例子要感谢维基百科)
使用您的代码,相关部分将变成:if(count($cresult) > 0) {
$arr = explode("'n", $cresult[0]['card']);
$encodedPhoto = $arr[18]; // Hash picture - no need to decode.
echo "<img src='data:image/jpeg;base64,{$encodedPhoto}' />"; // Add the data uri header
}
注意:我假设您的代码正确地从源数据提取base64编码的JPEG图像。如果图像格式不同,或者您用来提取图像的代码是错误的,那么很可能这个片段将无法工作。