显示来自不同来源的图像

Posted

技术标签:

【中文标题】显示来自不同来源的图像【英文标题】:displaying images from different sources 【发布时间】:2009-07-06 09:08:30 【问题描述】:

我正在尝试为特定项目生成图像报告。每个项目都有一个唯一的项目编号,存储在变量 $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】:

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

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

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

然后您实现 thumbnail.php 以输出图像(并且只是图像)以及相应的标题。例如:

<?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);
?>

对您的代码有两点说明:

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

【讨论】:

以上是关于显示来自不同来源的图像的主要内容,如果未能解决你的问题,请参考以下文章

如何将道具传递给来自不同来源的组件?

访问:按来自不同来源的日期排序

连接来自两个不同来源的两个数据帧。如果数据框丢失,则无法处理情况

如何播放来自两个不同来源的音频和视频?

在 AWS 项目中使用来自不同来源的 NuGet 包

当测试和训练数据集来自不同来源时,为啥测试准确性保持不变并且不会增加二进制分类