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

1

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

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

Теги:
hash
eid

1 ответ

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 из исходных данных. Если формат изображения отличается, или код, который вы используете для извлечения изображения, неверен, скорее всего, этот фрагмент не будет работать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню