显示来自不同来源的图像

时间:2009-07-06 09:08:30

标签: php sql image

我正在尝试为特定商品生成图片报告。每个项目都有一个唯一的项目编号,存储在变量$ pk。

在此,调用images / $ pk.jpg和/或screenshots / $ pk.jpg将显示当前项目页面的相关图像或屏幕截图。这在实际页面中工作正常,但不在我的弹出报告中。

对于一个文件,我希望在输出之前将其修剪为800px,而不存储结果文件。

此外,人们可以上传文件,因此我尝试检索以png结尾的所有上传文件的列表,并将其中的每一个输出到浏览器。

下面是我的代码,但只输出html标题。

我做错了什么?这是对imagepng方法的误用吗?

我的代码:

<?php
if (isset($_GET["pk"])) {
    $pk = $_GET["pk"];
}
$con = mysqli_connect("localhost","user","pass", "db");
if (!$con) {
    echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error();
    exit;
} {
    echo "<h1>Image report for auction number: ".$pk. "</h1> \n";
    $srcName = 'screenshots/'.$pk.'.png';
    $info = getimageinfo($srcName);
    $src = imagecreatefrompng($srcName);
    $dest = imagecreate($info[0], min($info[1], 800));
    imagecopy($dest, $src, 0, 0, 0, 0, $info[0], min($info[1], 800));
    imagepng($dest);
    imagepng('images/'.$pk.'.png');
    $filesQuery = "SELECT FILENAME FROM FILES WHERE FILENAME LIKE %png%";
    if ($getFiles = $con->prepare($filesQuery)) {
        $getFiles->execute();
        $getFiles->bind_result($FILENAME);
        $files = array();
        while ($getFiles->fetch()) {
            $filename = array(
                     'FILENAME' => $FILENAME,
                      );
            $files[] = $filename;
        }
    }
    $filesList = '';
    foreach ($files as $filenames) {
        $imagepng($filenames['FILENAME']);
    }
    ;
}

1 个答案:

答案 0 :(得分:1)

您不能像尝试那样混合HTML和PNG输出(即:在HTML中嵌入PNG)。您需要将此脚本分为两部分。

第一部分(例如report.php)输出所有图像的列表以及img标记。 E.g:

<img src="/thumbnail.php?pk=1234567" />

然后,您实现thumbnail.php以输出图像(以及图像)以及相应的标题。 E.g:

<?php
$srcName = 'screenshots/'.$_GET['pk'].'.png';
$info = getimageinfo($srcName);
$src = imagecreatefrompng($srcName);
$dest = imagecreate($info[0], min($info[1], 800));
imagecopy($dest, $src, 0, 0, 0, 0, $info[0], min($info[1], 800));

header('Content-type: image/png');
imagepng($dest);
imagedestroy($src);
imagedestroy($dest);
?>

对您的代码发表两条评论:

  1. imagepng()将图像资源作为其第一个参数(使用imagecreatefrompng或imagecreate创建的资源)。它没有文件名,因为它是第一个参数。
  2. 始终销毁使用imagedestroy()创建的图像,否则随着时间的推移会耗尽内存(需要重新启动网络服务器)。