PHP - как получить изображение из хеш-картинки?

У меня есть SDK для чтения карт eID, используемый с ( https://github.com/KeejOow/eidlib), он прекрасно работает.

использование SDK позволило мне прочитать данные моей идентификационной карты, но мне нужно было прочитать изображение, чтобы я получил значение Hash Picture с помощью 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? когда я выполняю приведенный выше код, я вообще не получаю предпросмотр изображения.

1 ответ

Решение

Ваш подход не сработает, потому что вы поместили двоичные данные изображения в свой <img>src Атрибут, где браузер ожидает увидеть URL. Вам необходимо указать URL-адрес, с которого браузер может получить изображение.

Существует простой способ сделать это, который будет хорошо работать для маленьких изображений: 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
} 

Примечание. Я предполагаю, что ваш код правильно извлекает изображение JPEG в кодировке base64 из исходных данных. Если формат изображения отличается или код, который вы используете для извлечения изображения, неверен, то, вероятно, этот фрагмент не будет работать.

Другие вопросы по тегам