[英]Creating thumbnails PHP problem
我有这个源代码,是从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在我的服务器上工作,我已经对其进行了单独测试。 所以这不是问题。 :)
我如何让它工作? :(
好吧,首先,使用imagecopyresampled()
,因为它将生成更好的缩略图。
其次,您不应为文件系统目录和url目录使用相同的变量。 您应该具有$filesystem_path_to_thumbs
和$url_path_to_thumbs
。 因此,您可以对其进行不同的设置。
第三,您可能要对宽度和高度都进行尺寸检查。 如果有人上传高大的图像会怎样? 您的缩略图将在目标框之外(但这可能不是大问题)。
第四,出于性能原因,在生成缩略图之前,您应该检查一下缩略图文件是否存在于thumbs目录中。
最后,它实际失败的原因是$final_width_of_image
, $path_to_image_directory
和$path_to_thumbs_directory
在函数中未定义。 或者:
在函数开始时将它们设置为全局,因此您可以在函数global $final_width_of_image, $path_to_image_directory, $path_to_thumbs_directory;
访问它们global $final_width_of_image, $path_to_image_directory, $path_to_thumbs_directory;
使它们成为函数的参数: function createTumbnail($image, $width, $path_to_images, $path_to_thumbs) {
在函数内部对其进行硬编码(将其声明从函数外部移至函数内部)。
就个人而言,我会做#2,但这取决于您的需求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.