1

我正在开发一个应用程序,该应用程序使用来自我只有读取权限的第 3 方服务器 (MS SQLSRV) 的数据。

该服务器上的图像存储为 IMAGE 数据类型。我使用 php (Laravel 5) 作为 AngularJS 前端的后端来显示图像。我不确定如何进行。

$students = DB::table('StudentImage')->where('STUDENTID', $id)->get();
$image = imagecreatefromstring($students[0]->IMAGE1); // unrecognized format error

我也试过这个:

$db = new PDO(...);
$stmt = $db->prepare("select IMAGE1 from [StudentImage] where [STUDENTID] = ?");
$stmt->execute([$id]);
$stmt->bindColumn('IMAGE1', $lob, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);

return response($lob, 200, ['Content-Type'=>'image/jpg']);

我得到的只是一个 20x20 的空白图像。但是,我可以在 Navicat(数据库管理工具)中看到图像。

我该如何进行?

4

1 回答 1

0

经过大量的头部撞击后,我已经弄清楚了。事实证明,SQL Server 中的“文本”字段有一个默认大小限制。您所要做的就是在运行SELECT查询之前使用以下SET TEXTSIZE命令“重置”大小:

<?php

    DB::select('SET TEXTSIZE 10485760');

    $students = DB::table('StudentImage')->where('STUDENTID', $id)->get();
    $image = imagecreatefromstring($students[0]->IMAGE1);

?>

这会将最大大小设置为 10 MB,这应该足以显示您想要的图像。这可能是 Navicat 在运行查询之前预设的。

于 2016-01-12T19:48:03.023 回答