2013-03-21 3 views
1

Я использую эту функцию, чтобы создавать эскизы изображений, загруженных пользователем, что я нашел здесь: http://webcheatsheet.com/php/create_thumbnail_images.php:PHP createThumbnail функция поиска неисправностей

function createThumbs($pathToImages, $pathToThumbs, $thumbWidth) 
{ 
    // open the directory 
    $dir = opendir($pathToImages); 

// loop through it, looking for any/all JPG files: 
if (false !== ($fname = readdir($dir))) { 
    // parse path for the extension 
    $info = pathinfo($pathToImages . $fname); 

// continue only if this is a JPEG image 
if (strtolower($info['extension']) == 'jpg') 
{ 
    echo "Creating thumbnail for {$fname} <br />"; 

    // load image and get image size 
    $img = imagecreatefromjpeg("{$pathToImages}{$fname}"); 
    $width = imagesx($img); 
    $height = imagesy($img); 

    // calculate thumbnail size 
    $new_width = $thumbWidth; 
    $new_height = floor($height * ($thumbWidth/$width)); 

    // create a new temporary image 
    $tmp_img = imagecreatetruecolor($new_width, $new_height); 

    // copy and resize old image into new image 
imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 

    // save thumbnail into a file 
    imagejpeg($tmp_img, "{$pathToThumbs}{$fname}"); 
} 
} 
// close the directory 
closedir($dir); 
} 

Эта функция работает отлично и делает именно то, что я хочу его , но, несмотря на это, я все еще получаю от него ошибки. См ошибки ниже:

Warning: opendir(images/008/01/0000288988r.jpg,images/008/01/0000288988r.jpg) [<a href='function.opendir'>function.opendir</a>]: The directory name is invalid. (code: 267)

Warning: opendir(images/008/01/0000288988r.jpg) [<a href='function.opendir'>function.opendir</a>]: failed to open dir: No error

Warning: readdir() expects parameter 1 to be resource, boolean given

Проблема, мне кажется, что я передаю реальный файл, а не только каталог, в параметры для функции , Это относится к $pathtoimages и $pathtothumbs. Функция должна искать через каталог, переданный ему, чтобы найти все изображения с расширением .jpg. Но я хотел бы просто выполнить функцию на одном изображении, загруженном во время загрузки. Можно ли каким-либо образом отредактировать эту функцию, чтобы это разрешить?

Заранее спасибо

ответ

1
function createThumbs($pathToImages, $pathToThumbs, $thumbWidth) 
{ 

// load image and get image size 
$img = imagecreatefromjpeg("{$pathToImages}"); 
$width = imagesx($img); 
$height = imagesy($img); 

// calculate thumbnail size 
$new_width = $thumbWidth; 
$new_height = floor($height * ($thumbWidth/$width)); 

// create a new temporary image 
$tmp_img = imagecreatetruecolor($new_width, $new_height); 

// copy and resize old image into new image 
imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 

// save thumbnail into a file 
imagejpeg($tmp_img, "{$pathToThumbs}"); 

} 

Думаю, что я преждевременно разместил этот вопрос. Спасибо за помощь от всех.

@csw похоже, что ваше решение, возможно, сработало, но я тоже работал, поэтому не тестировал его.

0

Быстрые и грязные:

function createThumb($pathToImage, $pathToThumb, $thumbWidth) 
{ 
    $fname = $pathToImage; 
    echo "Creating thumbnail for {$fname} <br />"; 

    // load image and get image size 
    $img = imagecreatefromjpeg("{$pathToImage}{$fname}"); 
    $width = imagesx($img); 
    $height = imagesy($img); 

    // calculate thumbnail size 
    $new_width = $thumbWidth; 
    $new_height = floor($height * ($thumbWidth/$width)); 

    // create a new temporary image 
    $tmp_img = imagecreatetruecolor($new_width, $new_height); 

    // copy and resize old image into new image 
imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 

    // save thumbnail into a file 
    imagejpeg($tmp_img, "{$pathToThumb}{$fname}"); 
} 
+0

Это не сработало. Больше ошибок теперь и сейчас эскизы больше не создаются :( – reubenCanowski

+0

Какие ошибки? Вставьте их здесь –

+0

Я понял это. Еще раз спасибо за помощь и проверку – reubenCanowski

-1

Вы должны использовать эту функцию, как это:

createThumbs("path_to_image", "path_to_thumb", "thumb_width"); 

Замена аргументов. Обратите внимание на слово «путь», это каталог, как»../images/02" , и вы, вероятно, используя путь вместе с именем изображения, как это:

createThumbs("images/008/01/0000288988r.jpg", " ...... 

И это должно быть:

createThumbs("images/008/01/" ... 
1

за $ pathToImage должен указывать на файл изображения
удалить
$dir = opendir($pathToImages);
if (false !== ($fname = readdir($dir))) {
// parse path for the extension
$info = pathinfo($pathToImages . $fname);

добавить $info = pathinfo($pathtoImages); // for the file name
$fname = $info['filename']

заменить {$pathToImages}{$fname} только $pathToImages, так как его в файл изображения.

btw, этот код не является подробным.