За последние 24 часа нас посетили 30488 программистов и 1808 роботов. Сейчас ищут 822 программиста ...

Обработак загруженого изображения

Тема в разделе "PHP для новичков", создана пользователем wir_wolf, 30 мар 2010.

  1. wir_wolf

    wir_wolf Активный пользователь

    С нами с:
    10 янв 2009
    Сообщения:
    183
    Симпатии:
    0
    Есть некий скрипт которым я загружаю картинку на сервер.
    PHP:
    1. <?php
    2. // Загрузка файлов на сервер
    3.  
    4. include_once("req.php");
    5. $imeage_editor = new imeage_edit();
    6.     // Если upload файла
    7.     if(isset($_FILES["myfile"]))
    8.     {
    9.         $myfile = $_FILES["myfile"]["tmp_name"];
    10.         $myfile_name = $_FILES["myfile"]["name"];
    11.         $myfile_size = $_FILES["myfile"]["size"];
    12.         $myfile_type = $_FILES["myfile"]["type"];
    13.         $error_flag = $_FILES["myfile"]["error"];
    14.  
    15.         // Если ошибок не было
    16.         if($error_flag == 0)
    17.         {
    18.             print("Имя файла на нашем сервере (во время запроса): ".$myfile."<br>");
    19.             print("Имя файла на компьютере пользователя: ".$myfile_name."<br>");
    20.             print("MIME-тип файла: ".$myfile_type."<br>");
    21.             print("Размер файла: ".$myfile_size."<br><br>");
    22.  
    23.             // Получаем содержимое файла
    24.            // $fp = fopen($myfile,"r");
    25.            // $content = fread($fp, filesize($myfile));
    26.            // fclose($fp);
    27.            
    28.            
    29.                 // Получаем массив с информацией о размере и формате картинки (mime)
    30.                 $size = getimagesize($myfile);
    31.                 $imeage_editor->editsize($myfile);
    32.                
    33.  
    34.            
    35.  
    36.         } // end of if 2
    37.     } // end of if 1
    38. ?>
    и есть некий класс, который эту картинку доводит до нужного мне состояния.
    PHP:
    1. <?php
    2. class imeage_edit {
    3.  
    4. function editsize($filename,$width,$height){
    5. // The file
    6. //$filename = 'test.jpg';
    7.  
    8. // Set a maximum height and width
    9. $width = 200;
    10. $height = 200;
    11.  
    12. // Content type
    13. //header('Content-type: image/jpeg');
    14.  
    15. // Get new dimensions
    16. list($width_orig, $height_orig) = getimagesize($filename);
    17.  
    18. $ratio_orig = $width_orig/$height_orig;
    19.  
    20. if ($width/$height > $ratio_orig) {
    21.    $width = $height*$ratio_orig;
    22. } else {
    23.    $height = $width/$ratio_orig;
    24. }
    25.  
    26. // Resample
    27. $image_p = imagecreatetruecolor($width, $height);
    28. $image = imagecreatefromjpeg($filename);
    29. var_dump($filename);
    30.  
    31.  
    32. imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
    33.  
    34. // Output
    35. //imagejpeg($image_p, null, 100);
    36. header('Content-type: image/jpeg');
    37. return $image_p;
    38. }
    39.  
    40.  
    41. function image_virtue($outfile,$infile,$neww,$newh,$quality) {
    42.  
    43.     $im=imagecreatefromjpeg($infile);
    44.     $im1=imagecreatetruecolor($neww,$newh);
    45.     imagecopyresampled($im1,$im,0,0,0,0,$neww,$newh,imagesx($im),imagesy($im));
    46.  
    47.     imagejpeg($im1,$outfile,$quality);
    48.     imagedestroy($im);
    49.     imagedestroy($im1);
    50.     return;}
    51. //header('Content-type: image/jpeg');
    52. //image_virtue("","test.jpg",3264,2448,50);
    53.  
    54.  
    55. }?>
    все вроде как хорошо..
    НО! не работает, в чем проблема, понять не могу.=(
     
  2. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    картинка небось не показывается?
    так и не должна вроде.
    думаю, логичнее сделать нечто вроде

    imagejpeg($imeage_editor->editsize($myfile));
     
  3. wir_wolf

    wir_wolf Активный пользователь

    С нами с:
    10 янв 2009
    Сообщения:
    183
    Симпатии:
    0
    так она в любом случае не показывает.
    я писал так
    $small_img = $imeage_editor->editsize($myfile);
    printf($small_img);
    header('Content-type: image/jpeg');
    тоже без безрезультатно...
    В идеале после обработки я должен картинку записать в директорию.
    Вот еще не уверен в конструкции.
    $small_img = $imeage_editor->editsize($myfile);

    Если файл уже загружен, то скрипт работает без проблем...
     
  4. wir_wolf

    wir_wolf Активный пользователь

    С нами с:
    10 янв 2009
    Сообщения:
    183
    Симпатии:
    0
    Возможно из-за того что в переменной $myfile передается "C:\\xamppt\temp\php5dd.tmp"
     
  5. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    какой-то мозговыносящий код.

    ты передаешь в
    $imeage_editor->editsize($myfile);
    где
    $myfile = $_FILES["myfile"]["tmp_name"];

    то бишь стринг.

    далее в editsize:
    getimagesize($filename);

    читаем мануал http://php.net/manual/en/function.getimagesize.html
    в частности:
    То есть скрипт пытается получить размер локального файла, путь к которому передан в параметре.
    А этот файл локально существует?
    Если я понял правильно, файл аплоадится, right?
     
  6. wir_wolf

    wir_wolf Активный пользователь

    С нами с:
    10 янв 2009
    Сообщения:
    183
    Симпатии:
    0
    Ну в принцыпе, она существует в виде темповского файла C:\\xamppt\temp\php5dd.tmp
     
  7. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    ну тогда сам бог велел экранировать слэши (у тебя только один экранирован):
    C:\\xamppt\\temp\\php5dd.tmp

    я предпочитаю использовать прямые слэши:

    C:/xamppt/temp/php5dd.tmp

    их не надо экранировать.
     
  8. wir_wolf

    wir_wolf Активный пользователь

    С нами с:
    10 янв 2009
    Сообщения:
    183
    Симпатии:
    0
    про C:\\xamppt\\temp\\php5dd.tmp я говорил образно, так как в данный момент не мог посмотреть. выглядит оно так.
    Имя файла на нашем сервере (во время запроса): C:\xampp\tmp\php2D.tmp