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