Silex + Twig + SQL 服务器:渲染图片
Silex + Twig + SQL Server : rendering pictures
我在 SQL 服务器数据库的 BLOB 列中有一些图片。
我需要获取它们并显示在 HTML 页面上。
但是在 HTML 页面的结果中,我在 src
属性中有长字符串而不是图片。
Silex 代码:
<!-- language-all: php -->
$pict->get('/show_pic/{id}', function ($id) use ($app) {
//Request of photos
$photos=getPhotoByID($id, $app);
return $app['twig']->render('test/template_show_pictures.html.twig', array('photos'=>$photos));
})->bind('show_pic');
function getPhotoByID($ID, $app)
{
$sql = "<some SQL here>";
$statement = $app['dbs']['mssql']->prepare($sql);
$statement->bindValue(1, $ID, "text");
$statement->execute();
$photo = $statement->fetchAll();
if (empty($photo)) {
return "We don't have a photo with id=".$ID;
}
return $photo;
}
Twig 文件:
<!-- language: twig -->
{% extends 'test/test_base.html.twig' %}
{% block title %}Pictures from DB{% endblock %}
{% block content %}
{% for im in photos %}
<img alt="Embedded Image" src="data:image/jpeg;base64,{{ im['Foto'] }}" />
{% endfor %}
{% endblock %}
HTML 标记:
<!-- language: lang-html -->
<!DOCTYPE html>
<html>
<head>
<title>Pictures from DB</title>
<link rel="stylesheet" href="/css/print.css">
</head>
<body>
<div class="page">
<img alt="Embedded Image" src="data:image/jpeg;base64,���JFIF...too many symbols here" />
</div>
</body>
</html>
有什么问题吗?
您应该使用 base64 对图像进行编码
添加用于编码为 base64 的过滤器:
$app->extend('twig', function ($twig, $app) {
$twig->addFilter('base64_encode', new \Twig_SimpleFilter('base64_encode', function ($value) {
return \base64_encode($value);
}));
return $twig;
});
并在模板中使用它:
{{ im['Foto']|base64_encode }}
我在 SQL 服务器数据库的 BLOB 列中有一些图片。
我需要获取它们并显示在 HTML 页面上。
但是在 HTML 页面的结果中,我在 src
属性中有长字符串而不是图片。
Silex 代码:
<!-- language-all: php -->
$pict->get('/show_pic/{id}', function ($id) use ($app) {
//Request of photos
$photos=getPhotoByID($id, $app);
return $app['twig']->render('test/template_show_pictures.html.twig', array('photos'=>$photos));
})->bind('show_pic');
function getPhotoByID($ID, $app)
{
$sql = "<some SQL here>";
$statement = $app['dbs']['mssql']->prepare($sql);
$statement->bindValue(1, $ID, "text");
$statement->execute();
$photo = $statement->fetchAll();
if (empty($photo)) {
return "We don't have a photo with id=".$ID;
}
return $photo;
}
Twig 文件:
<!-- language: twig -->
{% extends 'test/test_base.html.twig' %}
{% block title %}Pictures from DB{% endblock %}
{% block content %}
{% for im in photos %}
<img alt="Embedded Image" src="data:image/jpeg;base64,{{ im['Foto'] }}" />
{% endfor %}
{% endblock %}
HTML 标记:
<!-- language: lang-html -->
<!DOCTYPE html>
<html>
<head>
<title>Pictures from DB</title>
<link rel="stylesheet" href="/css/print.css">
</head>
<body>
<div class="page">
<img alt="Embedded Image" src="data:image/jpeg;base64,���JFIF...too many symbols here" />
</div>
</body>
</html>
有什么问题吗?
您应该使用 base64 对图像进行编码
添加用于编码为 base64 的过滤器:
$app->extend('twig', function ($twig, $app) {
$twig->addFilter('base64_encode', new \Twig_SimpleFilter('base64_encode', function ($value) {
return \base64_encode($value);
}));
return $twig;
});
并在模板中使用它:
{{ im['Foto']|base64_encode }}