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