2013-07-21 70 views
0

我有一個調整圖像大小的功能,它需要它們的名字。現在我想要做的只是將一個腳本放在一個目錄中,運行一次,並且它應該在所有這些圖像上運行該功能。PHP循環通過當前目錄文件進行圖像大小調整

在另一篇文章中,我發現了一些關於DirectoryIterator的信息,但是不能讓該目錄爲空來模仿當前文件夾。我該怎麼做呢?

下面的代碼工作的一個指定的文件夾(因此不是當前文件夾)

<?php 
function Resize_Image($save,$file,$t_w,$t_h,$s_path,$o_path){ 
    $s_path = trim($s_path); 
    $o_path = trim($o_path); 
    $save = $s_path . $save; 
    $file = $o_path . $file; 
    $attrib = getimagesize($file); 
    $width = $attrib[0]; 
    $height = $attrib[1]; 
    if(($width>$t_w) || ($height>$t_h)){ 
     $r1 = $t_w/$width; 
     $r2 = $t_h/$height; 
     if($r1<$r2){ 
      $size = $t_w/$width; 
     }else{ 
      $size = $t_h/$height; 
     } 
    }else{ 
     $size=1; 
    } 
    $modwidth = $width * $size; 
    $modheight = $height * $size; 
    $tn = imagecreatetruecolor($modwidth, $modheight); 
    switch($attrib['mime']){ 
     case "image/gif": 
      $image = imagecreatefromgif($file); 
      break; 
     case "image/jpeg": 
      $image = imagecreatefromjpeg($file); 
      break; 
     case "image/png": 
      $image = imagecreatefrompng($file); 
     break; 
    } 
    imagecopyresampled($tn, $image, 0, 0, 0, 0, $modwidth, $modheight, $width, $height); 
    imagejpeg($tn, $save, 100); 
    return; 
} 

$dir = new DirectoryIterator("files/"); 
foreach ($dir as $fileinfo) { 
    if (!$fileinfo->isDot()) { 
     $fullname = $fileinfo->getFilename(); 
     Resize_Image($fullname,$fullname,1366,767,'files/','files/'); 
    } 
} 
?> 

回答

1

有兩種方法來解決這個問題。

  1. 您可以使用PHP的一個「魔術常量」 __PATH__顯示的路徑,當前文件。但是,所有PHP安裝都已內置此功能。

  2. 功能getcwd()返回您正在查看的當前目錄,這可能不是您的文件所在的位置。你可以試試這個:

    <?php 
    chdir(dirname(__FILE__)); 
    echo getcwd(); 
    ?> 
    

一旦你拉的目錄,你可以喂到你的腳本,因爲它是。希望這可以幫助。

+0

'__PATH__'不被支持,但第二種方法確實有效。然而,當我嘗試在我的服務器上運行任何腳本時,我得到一個500內部服務器錯誤,所以我想我設置了一些錯誤... – jdepypere

+0

由於活網站上的服務器錯誤,我決定使用FTP並在本地執行,我的本地服務器也不會超時,所以我不需要爲大量圖像提供解決方法。謝謝! – jdepypere

相關問題