【问题标题】:Creating thumbnails from directory with php loop使用 php 循环从目录创建缩略图
【发布时间】:2012-05-10 14:29:15
【问题描述】:

好的,我已经有一段时间了,需要一些帮助。 我有一个包含 3000 多张图片的目录,我需要缩略图,但我无法让 php 来做这件事:(

我从未使用 php 制作缩略图,所以这对我来说是新的,我发现了一些脚本可以在您将图像上传到服务器时创建缩略图,我将从这里开始。

图像位置作为 URL 存储在 mysql 数据库中。 我需要它来创建图像的缩略图,当然,还需要使用缩略图 url 更新数据库。

这是我用来整合我的需求的脚本:
http://net.tutsplus.com/articles/news/how-to-dynamically-create-thumbnails/
我正在使用完全相同的 functions.php 和 config.php 文件。

这是我得到的:
$row['image'] 是每个图像的位置 ex:http://www.url.com/images/image.jpg
$filename 我正在剥离 url,所以它只提供 image.jpg

<?php
    require 'config.php';  
    require 'functions.php';  
    require 'db.php';  
    $sql = mysql_query("SELECT * FROM pics");  
    while($row = mysql_fetch_array($sql, MYSQL_ASSOC)){  

        $filename = preg_replace('['.$url.']', '', $row['image']);              
        $source = $row['image'];

        createThumbnail($filename);

        $thumb_loc = $url . "images/thumbs/" . $filename;
        $id = $row['id'];
        mysql_query("UPDATE pics SET image_thumb = '$thumb_loc' WHERE id = '$id'");
    }
?>

我正在为 $filename 提供正确的文件名,为 $source 提供图像源,所以它应该可以工作..
这是functions.php中的createThumbnail函数:

<?
function createThumbnail($filename) {

    require 'config.php';

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

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

    $nx = $final_width_of_image;
    $ny = $final_height_of_image;

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

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

    if(!file_exists($path_to_thumbs_directory)) {
      if(!mkdir($path_to_thumbs_directory)) {
           die("There was a problem. Please try again!");
      }
       }

    imagejpeg($nm, $path_to_thumbs_directory . $filename);
    $tn = '<img src="' . $path_to_thumbs_directory . $filename . '" alt="image" />';
    $tn .= '<br />Congratulations. Your file has been successfully uploaded, and a    thumbnail has been created.';
    echo $tn;
}
?>

以下是警告:

Warning: imagecreatefromjpeg(images/fullsized/image.jpg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in functions.php on line 7

Warning: imagesx(): supplied argument is not a valid Image resource in functions.php on line 14

Warning: imagesy(): supplied argument is not a valid Image resource in functions.php on line 15

Warning: Division by zero in functions.php on line 18

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in functions.php on line 20

Warning: imagecopyresized(): supplied argument is not a valid Image resource in functions.php on line 22

Warning: imagejpeg(): supplied argument is not a valid Image resource in functions.php on line 30

有人可以帮我吗?

【问题讨论】:

  • 您是否遇到任何错误?如果没有,您是否启用了 error_reporting?
  • 是的,我收到了一些警告。警告:imagecreatefromjpeg(images/fullsized/image.jpg) [function.imagecreatefromjpeg]:打开流失败:第 7 行的 functions.php 中没有这样的文件或目录
  • 嗯,基本上,它表示您尝试打开的文件不存在。也许您应该尝试指定一个完整的路径,从根目录开始。
  • 图片确实存在于循环提供的网址中。我认为这与图像在 url 上而不是文件上传有关。有没有办法从 url 中获取图像,临时保存并将其作为文件提供,创建缩略图并删除临时图像?
  • 此外,如果您说明 createThumbnail() 的声明方式,这将对我们有所帮助。好吧,也许不是。

标签: php mysql thumbnails


【解决方案1】:

问题似乎是您为要操作的图像文件指定的路径在脚本位置无效。

示例中的文件为images/fullsized/image.jpg,相关错误为failed to open stream: No such file or directory in functions.php on line 7

在告诉imagecreatefromjpeg 要打开什么文件时,您需要使用绝对路径,例如$_SERVER['DOCUMENT_ROOT'] . '/images/fullsized/image.jpg'/home/yoursite/public_html/images/fullsized/image.jpg

完整路径或绝对路径是指向同一路径的路径 一个文件系统上的位置,无论工作目录如何或 组合路径。它通常是参考根来编写的 目录。

所有其他错误消息只是图像无法打开的副作用。由于路径不正确,没有创建 GD 图像,因此在其上调用的函数将不起作用。

【讨论】:

  • 我删除了 move_uploaded_file ,因为我没有上传或移动任何内容。抱歉,我更新了帖子。
  • @DavidIvanov 我现在更新了答案以解决实际问题。
  • 好吧,@drew010,他说问题出在哪里。不知何故,您没有将现有图像指定给imagecreatefromjpeg()。也许您可以回显$path_to_image_directory . $filename 以查看您实际为该功能提供了什么。
  • @Zombaya 从错误消息的外观来看,images/fullsized/image.jpg 是赋予函数的内容,因为它是数据库中包含的路径。它需要针对这个特定的脚本进行调整。
  • @Zombaya 回显 $path_to_image_directory 。 $filename 结果为“images/fullsized/image.jpg”
猜你喜欢
  • 1970-01-01
  • 2017-12-27
  • 2011-06-18
  • 2014-06-16
  • 2015-05-04
  • 2023-03-20
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
相关资源
最近更新 更多