【问题标题】:Creating thumbnails PHP problem创建缩略图PHP问题
【发布时间】:2011-02-25 16:29:55
【问题描述】:

我有这个源代码,它是从 net tutsplus 获得的。我已经对其进行了配置,并使其在一个 PHP 文件中工作。它确实通过传输原始图像来工作,但它不会生成到缩略图文件夹。

<?php

$final_width_of_image = 100;
$path_to_image_directory = "../../img/events/" . urldecode($_GET['name']) . "/";
$path_to_thumbs_directory = "../../img/events/" . urldecode($_GET['name']) . "/thumbnails/";

function createThumbnail($filename)
{
    if(preg_match('/[.](jpg)$/', $filename)) 
    {
        $im = imagecreatefromjpeg($path_to_image_directory . $filename);
    } 
    elseif(preg_match('/[.](gif)$/', $filename)) 
    {
        $im = imagecreatefromgif($path_to_image_directory . $filename);
    } 
    elseif(preg_match('/[.](png)$/', $filename)) 
    {
        $im = imagecreatefrompng($path_to_image_directory . $filename);
    }

    $ox = imagesx($im);
    $oy = imagesy($im);

    $nx = $final_width_of_image;
    $ny = floor($oy * ($final_width_of_image / $ox));

    $nm = imagecreatetruecolor($nx, $ny);

    imagecopyresized($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy);

    imagejpeg($nm, $path_to_thumbs_directory . $filename);
    $tn = '<img src="' . $path_to_thumbs_directory . $filename . '" alt="image" />';
    echo $tn;
}

if(isset($_FILES['fupload'])) {

    if(preg_match('/[.](jpg)|(gif)|(png)$/', $_FILES['fupload']['name'])) {

        $filename = $_FILES['fupload']['name'];
        $source = $_FILES['fupload']['tmp_name'];
        $target = $path_to_image_directory . $filename;

        move_uploaded_file($source, $target);

        createThumbnail($filename);
    }
}

?>

基本上它应该生成上传图像的缩略图并将原始图像存储到不同的文件夹中。

路径是正确的,它通过获取 URL 中的文件夹名称来工作,它确实有效,但对于缩略图文件夹没有任何作用。

在您提出这个相关问题之前,是的,PHP GD 确实可以在我的服务器上生成缩略图,我已经单独对其进行了测试。所以这不是问题。 :)

如何让它工作? :(

【问题讨论】:

  • 是有什么错误还是什么都不显示?
  • 缩略图文件夹是否存在,是否有正确的权限?您收到任何错误消息吗?
  • 它会显示图像,但不会缩小到缩略图大小。权限很好。

标签: php image-processing image-manipulation thumbnails


【解决方案1】:

嗯,首先,使用imagecopyresampled(),因为它会生成更好的缩略图。

其次,您不应该对文件系统目录和 url 目录使用相同的变量。你应该有$filesystem_path_to_thumbs 和$url_path_to_thumbs。因此,您可以对它们进行不同的设置。

第三,您可能需要同时检查宽度和高度的尺寸。如果有人上传了一张高大的图片会怎样?您的缩略图将位于目标框之外(但这可能不是什么大问题)。

第四,您应该在生成缩略图之前检查缩略图文件是否存在于 thumbs 目录中(出于性能原因)...

最后,它实际上失败的原因是$final_width_of_image、$path_to_image_directory 和$path_to_thumbs_directory 没有在函数中定义。要么:

  1. 在函数的开头将它们设为全局,这样你就可以在函数global $final_width_of_image, $path_to_image_directory, $path_to_thumbs_directory;

  2. 中访问它们
  3. 将它们作为函数的参数:function createTumbnail($image, $width, $path_to_images, $path_to_thumbs) {

  4. 在函数内部对它们进行硬编码(将它们的声明从函数外部移动到函数内部)。

就个人而言,我会做 #2,但这取决于您的要求和需求......

【讨论】:

  • 您能否按照您的建议按照应有的方式编辑我的代码,我只需要完成此操作。
  • 我认为我给你的应该足以弄清楚需要做什么。如果您对某事感到困惑,请询问您对什么感到困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 2015-05-04
  • 2013-10-22
  • 2011-02-09
  • 2023-03-20
  • 2013-04-08
相关资源
最近更新 更多