使用WideImage扩展,我尝试使用以下功能从数据库渲染图像Blob:
protected function renderControlNonEditable()
{
assert('$this->model instanceof Item || $this->model->getModel() instanceof Item');
$content = null;
if ($this->model->files->count() > 0)
{
$content .= '<ul class="attachments">';
foreach ($this->model->files as $fileModel)
{
$filecontent = FileContent::getById($fileModel->id);
$filecontent = $filecontent->content;
$content .= '<li><span class="icon-attachment"></span>';
$content .= FileModelDisplayUtil::renderDownloadLinkContentByRelationModelAndFileModel($this->model,
$fileModel);
$content .= ' ' . FileModelDisplayUtil::convertSizeToHumanReadableAndGet((int)$fileModel->size);
$content .= '</li>';
$content .= WideImage::load($filecontent);
}
$content .= '</ul>';
}
return $content;
}
但是,呈现
$content
时,它将显示以下BLOB字符串,而不呈现图像。�PNG IHDRd$��8:IDATh�ݛy|Օ����
如何确保发出正确的标题?我该怎么做才能解决此问题?
public function actionImage($model, $fileModel)
{
$filecontent = FileContent::getById($fileModel->id);
$filecontent = $filecontent->content;
$content = WideImage::load($filecontent);
return $content;
}
最佳答案
好吧,正如其他人提到的那样,您不能在HTML页面上转储wideimage(或任何图像)的输出。最好的解决方案(也是我猜也是)是创建另一个仅处理图像的函数。
您应该像现在一样创建html,而不是
$content .= FileModelDisplayUtil::renderDownloadLinkContentByRelationModelAndFileModel($this->model, $fileModel);
我相信正在获得图像内容,
$content .= '<img src="'.$this->createUrl('image',array('file'=>$fileModel)).'">'
您的函数(actionImage)应该在同一个控制器中(无论如何在我的示例中)应该获取blob,执行您想做的任何事情,然后输出图像(并且仅图像,而不是html)。
关于php - 使用WideImage从数据库显示PNG,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22387463/