2012-02-26 3 views
1

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

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

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

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

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

+0

Это не перезапись существующего файла. Он просто создает новый файл с именем name.png_170x170.png и добавляет его к $ picOne. Я не хочу $ picOne как _170x170.png, только как name.png – user1234259

+0

Просто отвяжите старый файл и переименуйте новый файл .... – Baba

Смежные вопросы