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

PHP - how to get the image from hash picture?

我有电子身份证 reader SDK 使用了 ( https://github.com/KeejOow/eidlib ),效果很好。

使用 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?当我执行上面的代码时,我根本没有得到任何图像预览。

您的方法无效,因为您已将二进制图像数据放置在浏览器希望看到 URL 的 <img> src 属性中。您需要提供一个 URL,浏览器可以从中获取图像。

有一种简单的方法可以很好地处理小图像:Data URI

你可以像这样嵌入一个base64编码的图像(这个例子给出了一个红点):

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />

(感谢 Wikipedia 这个例子)

使用您的代码,相关部分将变为:

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 图像。如果图像格式不同,或者您用来提取图像的代码有误,那么此代码段可能无法运行。