2012-02-26 56 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 2012-02-26 19:40:17

+0

只需取消鏈接舊文件並重命名新文件.... – Baba 2012-03-19 08:03:31