Помогите с изменением размера изображения с помощью функции - PullRequest
0 голосов
/ 10 мая 2011

В приведенном ниже коде я пытаюсь изменить размер изображения после его загрузки. Все проверки, выполненные с помощью операторов echo, получают правильные данные, но не изменяют их размер и не помещают в папку.

    <?php
    if (!$error) {
// location where inital upload will be moved to
$name = $_FILES['uploaded']['name'];
$tname = $_FILES['uploaded']['tmp_name'];
$folder = "uploads/" ;
$dest_folder = "gallery/";
// find the type of image
switch ($_FILES["uploaded"]["type"]) {
case $_FILES["uploaded"]["type"] == "image/gif":
    move_uploaded_file($_FILES["uploaded"]["tmp_name"],$folder.$name);
    break;
case $_FILES["uploaded"]["type"] == "image/jpeg":
    move_uploaded_file($_FILES["uploaded"]["tmp_name"],$folder.$name);      
    break;
case $_FILES["uploaded"]["type"] == "image/pjpeg":
    move_uploaded_file($_FILES["uploaded"]["tmp_name"],$folder.$name);
    break;  
case $_FILES["uploaded"]["type"] == "image/png":
    move_uploaded_file($_FILES["uploaded"]["tmp_name"],$folder.$name);      
    break;
case $_FILES["uploaded"]["type"] == "image/x-png":
    move_uploaded_file($_FILES["uploaded"]["tmp_name"],$folder.$name);      
    break;

default:
    $error[] = 'Wrong image type selected. Only JPG, PNG or GIF accepted!.';
}///END OF SWITCH////
$resize = TRUE;
}//END IF NO ERRORS///

if ($resize == TRUE) {
    //echo "$folder<br />";
    //$file_name = $folder;
    $file_name = $name;
    $src_folder = $folder;
    thumb($file_name,$folder,$dest_folder,$tname);
}
?>

и вот функция, которую я вызываю:

function thumb ($file_name,$folder,$dest_folder,$tname) {
list($src_width, $src_height, $imagetype) = getimagesize($folder.$file_name);
$imagetype = image_type_to_mime_type($imagetype);

 $org_w = 500;
 //$dest_folder = "uploads/gallery/";
 //$new_img = $dest_folder;
 echo "Original width is  $src_width<br />";
 echo "Orginal height is  $src_height<br />";
 echo "Image type is $imagetype<br />";
 echo "Name of file is  $file_name<br />";
 echo "tmp_name is  $tname<br />";
 echo "New folder is $dest_folder<br />";

 switch( $imagetype ) {
    case "image/pjpeg":
    case "image/jpeg":
    case "image/jpg":
           $source = imagecreatefromjpeg($tname);
            echo "image is a jpg.<br />";
           break;
    case "image/png":
           $source = imagecreatefrompng($tname);
           break;
    case "image/gif":
           $source = imagecreatefromgif($tname);
            echo "image is a gif.";
           break;
   default:
            return false;
   }

 $org_h = ($src_height/$src_width)* $org_w;
 echo "h=$org_h<br />";
 echo "w=$org_w<br />";
 $tmp =imagecreatetruecolor($orig_w,$org_h);
 imagecopyresampled($tmp,$source,0,0,0,0,$orig_w,$org_h,$src_width,$src_height);
    switch($imagetype) {
    case "image/gif":
    imagegif($tmp, $dest_folder.$file_name,80); 
    break;
    case "image/pjpeg":
    case "image/jpeg":
    case "image/jpg":
    imagejpeg($tmp, $dest_folder.$file_name,80);
    break;
    case "image/png":
    case "image/x-png":
    imagepng($tmp, $dest_folder.$file_name,80);  
    break;
    }

}

Почему он не меняет размер и не помещает его в папку ?? STUCK !!!

Ответы [ 2 ]

1 голос
/ 10 мая 2011

Хорошо, сначала ваша непосредственная проблема ...

Если указан правильный тип mime, ваш сценарий перемещает загруженный файл в

'uploads/' . $name

Поэтому $tname больше не является допустимым путем, но вы все равно передаете его в функцию thumb(), где он используется для создания ресурса изображения с использованием одной из функций GD createfrom*.

Это, очевидно, не может работать, поскольку в $tname.

нет изображения.

Другие проблемы ...

Ваш первый блок переключателей может быть уменьшен до

switch ($_FILES["uploaded"]["type"]) {
    case "image/gif":
    case "image/jpeg":
    case "image/pjpeg":
    case "image/png":
    case "image/x-png":
        move_uploaded_file($_FILES["uploaded"]["tmp_name"],$folder.$name);      
        break;
    default:
        $error[] = 'Wrong image type selected. Only JPG, PNG or GIF accepted!.';
}

На этой строке

if ($ resize == TRUE)

есть хороший шанс $resize не определено. Вы должны по крайней мере инициализировать его на false вверху

0 голосов
/ 10 мая 2011

Пара проблем, но это то, что мешает функции большого пальца работать должным образом:

Изменение

$org_h = ($src_height/$src_width)* $org_w;
echo "h=$org_h<br />";
echo "w=$org_w<br />";
$tmp =imagecreatetruecolor($orig_w,$org_h);
imagecopyresampled($tmp,$source,0,0,0,0,$orig_w,$org_h,$src_width,$src_height);

до

$org_h = ceil(($src_height/$src_width)* $org_w);
echo "h=$org_h<br />";
echo "w=$org_w<br />";
$tmp = imagecreatetruecolor($org_w,$org_h);
imagecopyresampled($tmp,$source,0,0,0,0,$org_w,$org_h,$src_width,$src_height);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...