扫描目录并从现有图像创建缩略图

时间:2012-02-26 19:23:11

标签: php image

我想用这段代码完成的是,首先它在图像之后扫描目录,然后它需要一个图像并且如果它大于170x170则创建一个缩略图。我遇到的问题是当我尝试加载新文件时,它不能按预期工作。

<?php
foreach (glob('img/*.png') as $f) {
    $list[filemtime($f) . '-' . $f] = $f;
}   

$keys = array_keys($list);      
sort($keys);

$picOne = $list[array_pop($keys)];
$picTwo = $list[array_pop($keys)];
$picThree = $list[array_pop($keys)];
$picFour = $list[array_pop($keys)];

list($width, $height) = getimagesize($picOne);
if ($width > 170 && $height > 170) {
    $thumb = imagecreatetruecolor(170, 170);
    $source = imagecreatefrompng($picOne);
    imagecopyresized($thumb, $source, 0, 0, 0, 0, 170, 170, $width, $height);
    $path = $picOne."_170x170.png";
    imagepng($thumb, $path);
}

echo '<a href="'.$picOne.'" /><img width=170 height=170 src="'.$picOne.'" /></a>&nbsp;&nbsp;'; 
echo '<a href="'.$picTwo.'" /><img width=170 height=170 src="'.$picTwo.'" /></a>&nbsp;&nbsp;'; 
echo '<a href="'.$picThree.'" /><img width=170 height=170 src="'.$picThree.'" /></a>&nbsp;&nbsp;';  
echo '<a href="'.$picFour.'" /><img width=170 height=170 src="'.$picFour.'" /></a>';   

?>

此代码应该创建一个新文件,对吗?

$path = $picOne."_170x170.png";
imagepng($thumb, $path)

那部分工作得很好但是$ picOne加了_170x170.png但我不明白为什么。我认为我所做的只是用$ picOne名称+ _170x170.png创建一个新文件,但是$ picOne也可以获得它。

任何人都可以帮我修复此代码或解释我需要做些什么才能让它起作用吗?

这是我基本上要做的事情: 1.扫描目录。 2.拍摄图像并从中创建缩略图。 3.输出缩略图。

1 个答案:

答案 0 :(得分:1)

您遇到问题的原因是您没有创建新文件,而是覆盖现有文件。要在每次尝试使用此循环时创建新文件:

    $path =  $picOne."_170x170.png";

    $x = 0 ;
    while (file_exists($path))
    {
        $path = $picOne ."-" . $x . ."_170x170.png"; 
        $x++;
    }

这总是会给你一个新的文件名,你可以把它放在一个简单的函数中。