Сканирование каталога и создание миниатюр из уже существующих изображений - PullRequest
1 голос
/ 26 февраля 2012

То, что я пытаюсь выполнить с помощью этого кода, сначала сканирует каталог за изображениями, затем берет одно изображение и создает из него миниатюру, если его размер больше 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 Ответ

1 голос
/ 26 февраля 2012

Причиной возникновения проблемы является то, что вы не создаете новый файл, а перезаписываете существующий файл.Для создания нового файла каждый раз, когда вы пытаетесь использовать этот цикл:

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

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

Это всегда будет давать вам новое имя файла все время, и вы можете поместить его в простую функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...