PHP -如何从哈希图片获取图像


PHP - how to get the image from hash picture?

我从(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图像。如果图像格式不同,或者您用来提取图像的代码是错误的,那么很可能这个片段将无法工作。