Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: upload zdjęci i automatyczne tworzenie miniatur
Forum PHP.pl > Forum > PHP
xiaon
Próbuje stworzyć upload obrazków z automatycznym tworzeniem miniatur o określonych rozmiarach lecz nie wiem jak. znalazłem upload i miniaturki lecz nie wiem jak to połączyć ze sobą sadsmiley02.gif sadsmiley02.gif sadsmiley02.gif sadsmiley02.gif
  1. <?php
  2. $uploaddir = 'galeria/';
  3. if(move_uploaded_file($_FILES['plik']['tmp_name'], $uploaddir.$_FILES['plik']['name']))
  4. {
  5. echo 'Plik został załadowany poprawnie <br><br>';
  6. echo '<img src="galeria/'.$_FILES['plik']['name'].'">';
  7. }
  8. else
  9. echo 'Błąd podczas uploadowania pliku.';
  10.  
  11.     //Przypisujemy do zmiennej $img_path sciezke do obrazka
  12.     $img_path = $_GET['galeria/'];
  13.  
  14.     //Tworzymy sciezke do miniaturki
  15.     $thumb_path = substr($img_path,0,strrpos($img_path,'.')).'.t.jpg';
  16.  
  17.     //ustalamy maksymalny dopuszczalny rozmiar miniatury
  18.     $max_width=$max_height=100;
  19.  
  20.     //Sprawdzamy czy obraz istnieje
  21.     if(!file_exists($img_path))die('<p>Plik obrazu nie istnieje</p>');
  22.    
  23.     //Pobieramy informacjie o obrazie
  24.     $img_attr = getimagesize($img_path);
  25.  
  26.     //Sprawdzamy czy obraz jest wiekszy na szerokosc czy na wysokosc
  27.     // i zmniejszamy odpowiednio rozmiar
  28.     // $img_attr[0] - szerokosc, $img_attr[1] - wysokosc
  29.     if($img_attr[0]>$img_attr[1]){
  30.         $scale = $img_attr[0] / $max_width;
  31.     }else{
  32.         $scale = $img_attr[1] / $max_height;
  33.     }    
  34.  
  35.     //Tworzymy obraz miniaturki
  36.     $w = floor($img_attr[0]/$scale);
  37.     $h = floor($img_attr[1]/$scale);
  38.     $thumb = imagecreatetruecolor($w,$h);
  39.  
  40.     //Kopiujemy obraz pomniejszajac go,
  41.     imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  42.  
  43.     //Zapisujemy do pliku (jakosc 85)
  44.     imagejpeg($thumb,$thumb_path,85);
  45. ?>
ayeo
@xiaon, witaj na Forum! To Twój pierwszy post więc przymykam oko. Proszę o poprawne używanie znaczników BBcode. Tym razem poprawię za Ciebie. Jeszcze raz witam i życzę owocnego kodowania!


Pozdrawiam!
xiaon
Nikt nie chce mi pomóc;/;/
grubyx
Witaj, ja do takiego czegoś napisałem sobie dawno temu clasę:
  1. class.upload.php:
  2. <?
  3. // mz@zwyrol.com
  4.  
  5. class Upload {
  6. private $mime = false;
  7. private $thumb_data = array();
  8. private $max_size = false;
  9. private $size;
  10. private $tmp_name;
  11. private $type;
  12. private $file;
  13. private $dir;
  14. private $name;
  15. private $file_name;
  16.  
  17.  public function __construct($data) {
  18.    foreach($data as $opt => $val)
  19.      $this->$opt = $val;
  20.  }
  21.  public function SetDir($dir) {
  22.    $char = substr($dir, -1);
  23.    
  24.    if($char != '/')
  25.      $dir .= '/';
  26.  
  27.    $this->dir = $dir;
  28.  }
  29.  public function SetName($name) {
  30.      $this->file_name = $name;
  31.  }
  32.  public function FileName() {
  33.    if(!$this->dir)
  34.      return false;
  35.  
  36.    if(!$this->file_name) {
  37.      $parts = explode('.', $this->name);
  38.      $rozszerzenie = $parts[count($parts)-1];
  39.  
  40.      $this->file_name = date('YmdHis') . rand(1, 1000) . '.' . $rozszerzenie;
  41.      
  42.      while(file_exists($this->dir . $this->file_name))
  43.        $this->file_name = date('YmdHis') . rand(1, 1000) . '.' . $rozszerzenie;
  44.  
  45.    }
  46.    return $this->dir . $this->file_name;
  47.  }
  48.  public function ThumbName($thumb) {
  49.   if(!$this->dir || !$this->file_name)
  50.      return false;
  51.  
  52.   return $this->dir . $thumb . '-' . $this->file_name;
  53.  }
  54.  public function SetMime($mime_array) {
  55.    $this->mime = $mime_array;
  56.  }
  57.  public function SetMaxSize($size) {
  58.    $this->max_size = ($size * 1024);
  59.  }
  60.  public function Valid() {
  61.    if(is_array($this->mime)) {
  62.     if(!in_array($this->type, $this->mime)) {
  63.       return -1;
  64.     }
  65.    }
  66.  
  67.    if(!empty($this->max_size) && ($this->size > $this->max_size)) {
  68.      return -2;
  69.    }
  70.  
  71.    if($this->error > 0)
  72.        return -3;
  73.  
  74.    return true;
  75.  }
  76.  public function Msg($int) {
  77.   $msg = '';
  78.  
  79.   switch($int) {
  80.    case -1:
  81.       $msg = 'Błędny typ pliku, obsługiwane: ' . $this->ValidMimes();
  82.       break;
  83.    case -2:
  84.       $msg = 'Plik jest za duży (' . (float) round(($this->size / 1024)) . 'kb), maksymalny rozmiar wynosi: ' . ($this->max_size / 1024) . 'kb';
  85.       break;
  86.    case -3:
  87.       $msg = 'Przesyłanie pliku nie powiodło się, spróbuj ponownie';
  88.       break;
  89.   }
  90.   return '<br>' . $msg;
  91.  }
  92.  public function SaveFile() {
  93.    if(@move_uploaded_file($this->tmp_name, $this->FileName()))
  94.      return $this->FileName();
  95.      
  96.    return false;
  97.  }
  98.  public function MakeThumb($array) {
  99.     if(!is_array($array)) return false;
  100.     if(!file_exists($this->FileName())) return false;
  101.    
  102.     list($width_orig, $height_orig) = getimagesize($this->FileName());
  103.    
  104.  
  105.     foreach($array as $opt => $val) {
  106.       $width = $val['width'];
  107.       $height = $val['height'];
  108.       $proporcja = $val['proporcja'];
  109.      
  110.        if($proporcja) {
  111.          $ratio_orig = $width_orig/$height_orig;
  112.  
  113.          if ($width/$height > $ratio_orig) {
  114.             $width = $height*$ratio_orig;
  115.          } else {
  116.             $height = $width/$ratio_orig;
  117.          }
  118.        }
  119.  
  120.          $image_p = imagecreatetruecolor($width, $height);
  121.          $image = imagecreatefromjpeg($this->FileName());
  122.          imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
  123.  
  124.          $thumb[$opt] = $this->ThumbName($opt);
  125.          
  126.          $img = imagejpeg($image_p, $thumb[$opt], 100);
  127.     }
  128.     return $thumb;
  129.  }
  130.  public function ValidMimes() {
  131.    if(!is_array($this->mime)) return false;
  132.  
  133.    $mime = array();
  134.    $mimes = array('image/gif' => 'gif',
  135.                   'image/png' => 'png',
  136.                   'image/x-MS-bmp' => 'bmp',
  137.                   'image/jpeg' => 'jpg',
  138.                   'image/pjpg' => 'jpg',
  139.                   'image/pjpeg' => 'jpg',
  140.                   'image/jpg' => 'jpg',
  141.                   'image/tiff' => 'tif',
  142.                   'text/html' => 'html',
  143.                   'text/plain' => 'txt',
  144.                   'application/x-gzip' => 'tgz',
  145.                   'application/x-tar' => 'tar',
  146.                   'application/zip' => 'zip',
  147.                   'application/mac-binhex40' => 'hqx',
  148.                   'application/msword' => 'doc',
  149.                   'application/pdf' => 'pdf',
  150.                   'application/postcript' => 'ps',
  151.                   'application/rtf' => 'rtf',
  152.                   'application/x-dvi' => 'dvi',
  153.                   'application/x-latex' => 'latex',
  154.                   'application/x-shockwave-flash' => 'swf',
  155.                   'application/x-tex' => 'tex',
  156.                   'audio/midi' => 'mid',
  157.                   'audio/basic' => 'au',
  158.                   'audio/mpeg' => 'mp3',
  159.                   'audio/x-pn-realaudio' => 'ram',
  160.                   'audio/x-realaudio' => 'ra',
  161.                   'audio/x-wav' => 'wav',
  162.                   'video/mpeg' => 'mpg',
  163.                   'model/vrml' => 'wrl',
  164.                   'video/quicktime' => 'mov',
  165.                   'video/x-msvideo' => 'avi'
  166.                  );
  167.  
  168.    foreach($this->mime as $m) {
  169.      if(!empty($mimes[$m])) {
  170.        $mime[] = $mimes[$m];
  171.      }
  172.    }
  173.    return join(', ', array_unique($mime));
  174.  }
  175. }
  176. ?>


Wiem, że jest lamersko napisana, ale działa w chwili gdy ja robilem uczylem sie programować snitch.gif, uruchamiamy:

  1. <?php
  2. if(!empty($_FILES['foto']['name'])) {
  3.  $up = new Upload($_FILES['foto']);
  4.  
  5.  $up->SetDir('../img/'); // Katalog do ktorego maja zapisywane byc zdjecia
  6.  // dostepne mime types dla pliku:
  7.  
  8.  $mime_types = array('image/jpeg','image/pjpg', 'image/pjpeg', 'image/jpg');
  9.  $up->SetMime($mime_types);
  10.  
  11.  if(($num = $up->Valid()) === true) {
  12.    $file = $up->SaveFile();
  13.  
  14.    if(!$file || !file_exists($file))
  15.     echo $up->Msg(-3); // jeśli nie uploadnelo pliku zwraca komunikat błędu
  16.    else {
  17.    // Tablica z ktorej czyta ila ma zrobic miniatur i ustala wyskość, szerokość - jesli proprocja jest rowna 1
  18.   //  ustawia ją, jeśli jest na 0 zrobi miniatury w takim rozmiarze jak podany:
  19.    $thumb = array('thumb1' => array('width' => 100, 'height' => 100, 'proporcja' => 1),
  20.                   'thumb2' => array('width' => 410, 'height' => 310, 'proporcja' => 1),
  21.                   );
  22.  
  23.     $array = $up->MakeThumb($thumb); // funkcja zwraca tablice z sciezkami miniatur
  24.  
  25.     $array['foto_oryginalne'] = $file;
  26.  
  27.    
  28.      var_dump($array);
  29.      
  30.    }
  31.  } else {
  32.   echo $up->Msg($num); // komuniakt błedy gdy coś się nie powiedzie
  33.  }
  34. }
  35. ?>

W razie problemów pisz, postaram się odpowiedzieć
xiaon
to mam utworzyć nowy php o nazwie class.upload.php z kodem a gdzie mam wkleić drugi plik bo mam 2 pliki zaladuj.inc.php z kodem
  1. <script type="text/javascript">
  2. <!-- <![CDATA[
  3. function rozszerzenie(f) {
  4. nazwa = f.plik.value;
  5. nazwa = nazwa.toLowerCase();
  6. if (nazwa=="") {
  7. alert("Musisz wybrac plik do wyslania!");
  8. return false;
  9. }
  10. if (nazwa.lastIndexOf(".gif")<0 && nazwa.lastIndexOf(".jpg")<0) {
  11. alert("Mozesz wysylac tylko pliki GIF i JPG!");
  12. return false;
  13. }
  14. return true;
  15. }
  16. // ]]> -->
  17. </script>
  18. <form action="upl.php" method="post" enctype="multipart/form-data"
  19. onsubmit="return rozszerzenie(this)"><div>
  20. <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
  21. <input name="plik" type="file" />
  22. <input type="submit" value=" wyslij " />
  23. </div></form>[b]
i drugi upl.php z kodem z początku postu
grubyx
Stwórz class.upload.php i do upl.php (tego co masz w formularzu) dopisz to co pisałem o uruchomieniu. Pozdrawiam.
BatGraf
Przyłaczę się do prosby kolegi. Możesz to po kolei opisać ? Próbuję to zrobić, ale cos jednak jest nnie tak. Myślę, ze z tego tutoriala, który zrobisz, wiele osób skorzysta.

Z góry dzieki smile.gif
pooh
Ja używam czegoś takiego, może pomoże, albo naświetli temat.
Można to oczywiście spakować do klasy, ale jakoś nie ma kiedy.


  1. <?php
  2. $ret= upload_image ($_FILES['nazwa_tablicy']['tmp_name'], $_FILES['nazwa_tablicy']['name']);
  3. if ($ret)
  4.   {
  5.      //powiodlo_sie_zapisanie_zdjecia_zatem_tworzymy_miniaturke
  6.  
  7.      $ret= create_miniature ($_FILES['nazwa_tablicy']['tmp_name'], $_FILES['nazwa_tablicy']['name']);
  8.      if ($ret)
  9.         {
  10.            //powiodlo_sie_zapisanie_miniaturki
  11.         }
  12.      else
  13.         {
  14.            //zrob_cos_bo_miniaturka_nie_zostala_utworzona
  15.         }
  16. }
  17. else
  18.   {
  19.      //zrob_cos_bo_nie_powiodlo_sie_zapisanie_zdjecia
  20.    }
  21. ?>


  1. <?php
  2. function upload_image ($tmp_file_name, $dst_file_name)
  3.   {
  4.      $lret= copy ($tmp_file_name, 'katalog_gdzie_bedzie_zapisane_zdjecie'.$dst_file_name);
  5.      return ($lret);
  6.   }
  7. ?>

  1. <?php
  2. function create_miniature ($tmp_file_name, $dst_file_name)
  3.   {
  4.      $src = imagecreatefromjpeg ($tmp_file_name);
  5.      if (!$src)
  6.        {
  7.           return (0);
  8.        }
  9.      $src_width  = imagesx($src);
  10.      $src_height = imagesy($src);
  11.      $dst_width= 50; //taka szerokosc bedzie miala miniaturka
  12.      $dst_height= 50; //taka wysokosc bedzie miala miniaturka
  13.      $dst = imagecreatetruecolor($dst_width, $dst_height);
  14.  
  15.      if (!$dst)
  16.        {
  17.           return (0);
  18.        }                
  19.  
  20.      $lret= imagecopyresampled($dst, $src, 0, 0, 0, 0, $dst_width, $dst_height, $src_width, $src_height);
  21.      if (!$lret)
  22.        {
  23.           return (0);
  24.        }                
  25.  
  26.      $lret= imagejpeg ($dst, 'katalog_do_zapisania_miniaturki'.$dst_file_name, 100); //liczba 100, to jakość
  27.      if (!$lret)
  28.         {
  29.           return (0);
  30.         }                
  31.  
  32.      imagedestroy($src);        
  33.      imagedestroy($dst);                
  34.  
  35.      return (1);
  36.   }
  37. ?>
grubyx
Ok więc robimy sobie plik class.upload.php i wrzucamy do niego:
  1. <?
  2. // mz@zwyrol.com
  3.  
  4. class Upload {
  5. private $mime = false;
  6. private $thumb_data = array();
  7. private $max_size = false;
  8. private $size;
  9. private $tmp_name;
  10. private $type;
  11. private $file;
  12. private $dir;
  13. private $name;
  14. private $file_name;
  15.  
  16.  public function __construct($data) {
  17.    foreach($data as $opt => $val)
  18.      $this->$opt = $val;
  19.  }
  20.  public function SetDir($dir) {
  21.    $char = substr($dir, -1);
  22.  
  23.    if($char != '/')
  24.      $dir .= '/';
  25.  
  26.    $this->dir = $dir;
  27.  }
  28.  public function SetName($name) {
  29.      $this->file_name = $name;
  30.  }
  31.  public function FileName() {
  32.    if(!$this->dir)
  33.      return false;
  34.  
  35.    if(!$this->file_name) {
  36.      $parts = explode('.', $this->name);
  37.      $rozszerzenie = $parts[count($parts)-1];
  38.  
  39.      $this->file_name = date('YmdHis') . rand(1, 1000) . '.' . $rozszerzenie;
  40.  
  41.      while(file_exists($this->dir . $this->file_name))
  42.        $this->file_name = date('YmdHis') . rand(1, 1000) . '.' . $rozszerzenie;
  43.  
  44.    }
  45.    return $this->dir . $this->file_name;
  46.  }
  47.  public function ThumbName($thumb) {
  48.   if(!$this->dir || !$this->file_name)
  49.      return false;
  50.  
  51.   return $this->dir . $thumb . '-' . $this->file_name;
  52.  }
  53.  public function SetMime($mime_array) {
  54.    $this->mime = $mime_array;
  55.  }
  56.  public function SetMaxSize($size) {
  57.    $this->max_size = ($size * 1024);
  58.  }
  59.  public function Valid() {
  60.    if(is_array($this->mime)) {
  61.     if(!in_array($this->type, $this->mime)) {
  62.       return -1;
  63.     }
  64.    }
  65.  
  66.    if(!empty($this->max_size) && ($this->size > $this->max_size)) {
  67.      return -2;
  68.    }
  69.  
  70.    if($this->error > 0)
  71.        return -3;
  72.  
  73.    return true;
  74.  }
  75.  public function Msg($int) {
  76.   $msg = '';
  77.  
  78.   switch($int) {
  79.    case -1:
  80.       $msg = 'Błędny typ pliku, obsługiwane: ' . $this->ValidMimes();
  81.       break;
  82.    case -2:
  83.       $msg = 'Plik jest za duży (' . (float) round(($this->size / 1024)) . 'kb), maksymalny rozmiar wynosi: ' . ($this->max_size / 1024) . 'kb';
  84.       break;
  85.    case -3:
  86.       $msg = 'Przesyłanie pliku nie powiodło się, spróbuj ponownie';
  87.       break;
  88.   }
  89.   return '<br>' . $msg;
  90.  }
  91.  public function SaveFile() {
  92.    if(@move_uploaded_file($this->tmp_name, $this->FileName()))
  93.      return $this->FileName();
  94.  
  95.    return false;
  96.  }
  97.  public function MakeThumb($array) {
  98.     if(!is_array($array)) return false;
  99.     if(!file_exists($this->FileName())) return false;
  100.  
  101.     list($width_orig, $height_orig) = getimagesize($this->FileName());
  102.  
  103.  
  104.     foreach($array as $opt => $val) {
  105.       $width = $val['width'];
  106.       $height = $val['height'];
  107.       $proporcja = $val['proporcja'];
  108.  
  109.        if($proporcja) {
  110.          $ratio_orig = $width_orig/$height_orig;
  111.  
  112.          if ($width/$height > $ratio_orig) {
  113.             $width = $height*$ratio_orig;
  114.          } else {
  115.             $height = $width/$ratio_orig;
  116.          }
  117.        }
  118.  
  119.          $image_p = imagecreatetruecolor($width, $height);
  120.          $image = imagecreatefromjpeg($this->FileName());
  121.          imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
  122.  
  123.          $thumb[$opt] = $this->ThumbName($opt);
  124.  
  125.          $img = imagejpeg($image_p, $thumb[$opt], 100);
  126.     }
  127.     return $thumb;
  128.  }
  129.  public function ValidMimes() {
  130.    if(!is_array($this->mime)) return false;
  131.  
  132.    $mime = array();
  133.    $mimes = array('image/gif' => 'gif',
  134.                   'image/png' => 'png',
  135.                   'image/x-MS-bmp' => 'bmp',
  136.                   'image/jpeg' => 'jpg',
  137.                   'image/pjpg' => 'jpg',
  138.                   'image/pjpeg' => 'jpg',
  139.                   'image/jpg' => 'jpg',
  140.                   'image/tiff' => 'tif',
  141.                   'text/html' => 'html',
  142.                   'text/plain' => 'txt',
  143.                   'application/x-gzip' => 'tgz',
  144.                   'application/x-tar' => 'tar',
  145.                   'application/zip' => 'zip',
  146.                   'application/mac-binhex40' => 'hqx',
  147.                   'application/msword' => 'doc',
  148.                   'application/pdf' => 'pdf',
  149.                   'application/postcript' => 'ps',
  150.                   'application/rtf' => 'rtf',
  151.                   'application/x-dvi' => 'dvi',
  152.                   'application/x-latex' => 'latex',
  153.                   'application/x-shockwave-flash' => 'swf',
  154.                   'application/x-tex' => 'tex',
  155.                   'audio/midi' => 'mid',
  156.                   'audio/basic' => 'au',
  157.                   'audio/mpeg' => 'mp3',
  158.                   'audio/x-pn-realaudio' => 'ram',
  159.                   'audio/x-realaudio' => 'ra',
  160.                   'audio/x-wav' => 'wav',
  161.                   'video/mpeg' => 'mpg',
  162.                   'model/vrml' => 'wrl',
  163.                   'video/quicktime' => 'mov',
  164.                   'video/x-msvideo' => 'avi'
  165.                  );
  166.  
  167.    foreach($this->mime as $m) {
  168.      if(!empty($mimes[$m])) {
  169.        $mime[] = $mimes[$m];
  170.      }
  171.    }
  172.    return join(', ', array_unique($mime));
  173.  }
  174. }
  175. ?>

Robimy plik upload.php i wrzucamy tam:
  1. <?
  2. // mz@zwyrol.com
  3.  
  4. include('class.upload.php');
  5.  
  6. if(!empty($_FILES['foto']['name'])) {
  7.  $up = new Upload($_FILES['foto']);
  8.  $up->SetDir('../img/'); // ustawia katalog do ktorego będzie mial wrzucic zdjęcia i miniatury
  9.  
  10.  $mime_types = array('image/jpeg','image/pjpg', 'image/pjpeg', 'image/jpg');
  11.  $up->SetMime($mime_types); // Metoda, która ustawia valid mime types dla plików z tablicy $mime_types
  12.  
  13.  if(($num = $up->Valid()) === true) {
  14.    $file = $up->SaveFile();
  15.  
  16.    if(!$file || !file_exists($file))
  17.     echo $up->Msg(-3); // pokazuje błąd, że plik się nie uploadnął
  18.    else {
  19.    // tablica do miniatur
  20.   // Jeśli proporcja = 1 - ustawi proporcje, jeśli = 0 ustawi rozmiar miniatury taki jak w podanych wartościach
  21.   // Moze byc dowolna ilość elementów tworzyć po prostu:
  22.  // $thumb = array('element' => array('width' => 'szerokość', 'height' => 'wysokość', 'proporcja' => 'wartośc 0 lub 1'));
  23.  // Stworzy tyle miniatur ile jest elementów w poniższym przykładzie tworzy dwie miniatury
  24.  
  25.    $thumb = array('thumb1' => array('width' => 100, 'height' => 100, 'proporcja' => 1),
  26.                   'thumb2' => array('width' => 410, 'height' => 310, 'proporcja' => 1),
  27.                   );
  28.  
  29.     $array = $up->MakeThumb($thumb);
  30.     $array['foto'] = $file;
  31.  
  32.     var_dump($array); // pokazuje zawartość tablicy $array
  33.     // Zwróci tablice asocjacyjna klucze 'foto', 'thumb1', 'thumb2' i wartości to pathe do plików  
  34.    
  35. }
  36.  } else {
  37.   echo $up->Msg($num); // pokazuje komunikat błędu jeśli validacja się nie powiedzie
  38.  }
  39. }
  40. ?>

I robimy formularz np. form.html:
  1. <form action="upload.php" method="post" enctype="multipart/form-data">
  2. <input type="file" name="foto"><br>
  3. <input type="submit" value="Dodaj zdjęcie">
  4. </form>


Wchodzimy na http://adresURL.pl/form.html i uploadujemy plik
Mam nadzieje, że pomogło i będzie działać. W razie problemów proszę pisać. Pozdrawiam.
xiaon
zrobiłem tak jak napisane wyżej i wyskoczył mi błąd
Cytat
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in c:\usr\krasnal\www\strona\galeria\class.upload.php on line 5
BatGraf
a u mnie bardzo ładnie chodzi. Dzieki wielkie, głównie za cierpliwość. Postaram się przejrzeć po kolei ten skrypt, żeby nie zostało to na zasadzie kopiuj wklej.

Żałuję tylko, że nie moge kliknąć "Pomógł" , bo nie zakładałem tego postu, ale Twój post Pomógł smile.gif

Mam tylko jedno czy dwa pytania. Wiem w którym miejscu tworzy jedną czy dwie miniatury, jakie rozmiary ma mieć (proporcja lub szer i wys), ale podpowiedz mi, jak ustawić, żeby stosowało tylko np szer lub tylko wysokość? Chcę zrobic tak żeby wszystkie miniaturoy miały taką samą wysokość lub taka samą szerokość.

1. Jak utworzyć miniaturę tylko zmieniając jeden bok? Np szer, a wys zmniejszy się proporcjonalnie?
2. Czy mozna miniatury zapisywać w innym folderze, a duże zdjęcie w innym?
3. Czy mozna uploadując zdjęcie zmienic mu rozmiar na np 800 szer (duża fotka)
grubyx
Cytat(xiaon @ 17.01.2009, 20:52:07 ) *
zrobiłem tak jak napisane wyżej i wyskoczył mi błąd

Wydaje mi się, że używasz php4 a napisałem to na php5.
BatGraf:
By zrobić miniatury o określonych rozmiarach użyj tablicy:
  1. <?php
  2. $thumb = array('thumb1' => array('width' => 100, 'height' => 100, 'proporcja' => 0),
  3.                        'thumb2' => array('width' => 200, 'height' => 200, 'proporcja' => 0)
  4.                       );
  5. $array = $up->MakeThumb($thumb);
  6. ?>

$array będzie zawierać tablice asocjacyjną z kluczami: thumb1, thumb2 i wartości to będą pathe do plików.

Jeśli proporcja wynosi 1 - wtedy ustawia proporcje nie przekraczając rozmiaru podanego w width i height jeśli jest = 0
Wtedy robi miniature o rozmiarach równych podanych w width i height.
Mam nadzieje, że teraz jest wszystko jasne. Pozdrawiam.
endigarnek
Witam, Mógłby ktoś przerobić skrypt tak aby można było wybrać osobne miejsce gdzie ma się dodać miniaturka i plik orginalny?
grubyx
Zrobiłem. Plik class.upload.php:

  1. <?
  2. class Upload {
  3. private $mime = false;
  4. private $thumb_data = array();
  5. private $max_size = false;
  6. private $size;
  7. private $tmp_name;
  8. private $type;
  9. private $file;
  10. private $dir;
  11. private $name;
  12. private $file_name;
  13. private $thumb_dir;
  14.  
  15.  
  16.  public function __construct($data) {
  17.    foreach($data as $opt => $val)
  18.      $this->$opt = $val;
  19.  }
  20.  public function SetThumbDir($dir) {
  21.   $ch = substr($dir, -1);
  22.  
  23.   if($char != '/')
  24.    $dir .= '/';
  25.  
  26.    $this->thumb_dir = $dir;
  27.  }
  28.  public function SetDir($dir) {
  29.    $char = substr($dir, -1);
  30.  
  31.    if($char != '/')
  32.      $dir .= '/';
  33.  
  34.    $this->dir = $dir;
  35.  }
  36.  public function SetName($name) {
  37.      $this->file_name = $name;
  38.  }
  39.  public function FileName() {
  40.    if(!$this->dir)
  41.      return false;
  42.  
  43.    if(!$this->file_name) {
  44.      $parts = explode('.', $this->name);
  45.      $rozszerzenie = $parts[count($parts)-1];
  46.  
  47.      $this->file_name = date('YmdHis') . rand(1, 1000) . '.' . $rozszerzenie;
  48.  
  49.      while(file_exists($this->dir . $this->file_name))
  50.        $this->file_name = date('YmdHis') . rand(1, 1000) . '.' . $rozszerzenie;
  51.  
  52.    }
  53.    return $this->dir . $this->file_name;
  54.  }
  55.  public function ThumbName($thumb) {
  56.   if(!$this->thumb_dir || !$this->file_name)
  57.      return false;
  58.  
  59.   return $this->thumb_dir . $thumb . '-' . $this->file_name;
  60.  }
  61.  public function SetMime($mime_array) {
  62.    $this->mime = $mime_array;
  63.  }
  64.  public function SetMaxSize($size) {
  65.    $this->max_size = ($size * 1024);
  66.  }
  67.  public function Valid() {
  68.    if(is_array($this->mime)) {
  69.     if(!in_array($this->type, $this->mime)) {
  70.       return -1;
  71.     }
  72.    }
  73.  
  74.    if(!empty($this->max_size) && ($this->size > $this->max_size)) {
  75.      return -2;
  76.    }
  77.  
  78.    if($this->error > 0)
  79.        return -3;
  80.  
  81.    return true;
  82.  }
  83.  public function Msg($int) {
  84.   $msg = '';
  85.  
  86.   switch($int) {
  87.    case -1:
  88.       $msg = 'Błędny typ pliku, obsługiwane: ' . $this->ValidMimes();
  89.       break;
  90.    case -2:
  91.       $msg = 'Plik jest za duży (' . (float) round(($this->size / 1024)) . 'kb), maksymalny rozmiar wynosi: ' . ($this->max_size / 1024) . 'kb';
  92.       break;
  93.    case -3:
  94.       $msg = 'Przesyłanie pliku nie powiodło się, spróbuj ponownie';
  95.       break;
  96.   }
  97.   return '<br>' . $msg;
  98.  }
  99.  public function SaveFile() {
  100.    if(@move_uploaded_file($this->tmp_name, $this->FileName()))
  101.      return $this->FileName();
  102.  
  103.    return false;
  104.  }
  105.  public function MakeThumb($array) {
  106.     if(!is_array($array)) return false;
  107.     if(!file_exists($this->FileName())) return false;
  108.  
  109.     list($width_orig, $height_orig) = getimagesize($this->FileName());
  110.  
  111.  
  112.     foreach($array as $opt => $val) {
  113.       $width = $val['width'];
  114.       $height = $val['height'];
  115.       $proporcja = $val['proporcja'];
  116.  
  117.        if($proporcja) {
  118.          $ratio_orig = $width_orig/$height_orig;
  119.  
  120.          if ($width/$height > $ratio_orig) {
  121.             $width = $height*$ratio_orig;
  122.          } else {
  123.             $height = $width/$ratio_orig;
  124.          }
  125.        }
  126.  
  127.          $image_p = imagecreatetruecolor($width, $height);
  128.          $image = imagecreatefromjpeg($this->FileName());
  129.          imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
  130.  
  131.          $thumb[$opt] = $this->ThumbName($opt);
  132.  
  133.          $img = imagejpeg($image_p, $thumb[$opt], 100);
  134.     }
  135.     return $thumb;
  136.  }
  137.  public function ValidMimes() {
  138.    if(!is_array($this->mime)) return false;
  139.  
  140.    $mime = array();
  141.    $mimes = array('image/gif' => 'gif',
  142.                   'image/png' => 'png',
  143.                   'image/x-MS-bmp' => 'bmp',
  144.                   'image/jpeg' => 'jpg',
  145.                   'image/pjpg' => 'jpg',
  146.                   'image/pjpeg' => 'jpg',
  147.                   'image/jpg' => 'jpg',
  148.                   'image/tiff' => 'tif',
  149.                   'text/html' => 'html',
  150.                   'text/plain' => 'txt',
  151.                   'application/x-gzip' => 'tgz',
  152.                   'application/x-tar' => 'tar',
  153.                   'application/zip' => 'zip',
  154.                   'application/mac-binhex40' => 'hqx',
  155.                   'application/msword' => 'doc',
  156.                   'application/pdf' => 'pdf',
  157.                   'application/postcript' => 'ps',
  158.                   'application/rtf' => 'rtf',
  159.                   'application/x-dvi' => 'dvi',
  160.                   'application/x-latex' => 'latex',
  161.                   'application/x-shockwave-flash' => 'swf',
  162.                   'application/x-tex' => 'tex',
  163.                   'audio/midi' => 'mid',
  164.                   'audio/basic' => 'au',
  165.                   'audio/mpeg' => 'mp3',
  166.                   'audio/x-pn-realaudio' => 'ram',
  167.                   'audio/x-realaudio' => 'ra',
  168.                   'audio/x-wav' => 'wav',
  169.                   'video/mpeg' => 'mpg',
  170.                   'model/vrml' => 'wrl',
  171.                   'video/quicktime' => 'mov',
  172.                   'video/x-msvideo' => 'avi'
  173.                  );
  174.  
  175.    foreach($this->mime as $m) {
  176.      if(!empty($mimes[$m])) {
  177.        $mime[] = $mimes[$m];
  178.      }
  179.    }
  180.    return join(', ', array_unique($mime));
  181.  }
  182. }
  183. ?>


upload.php:
  1. <?
  2. include('class.upload.php');
  3.  
  4. if(!empty($_FILES['foto']['name'])) {
  5.  $up = new Upload($_FILES['foto']);
  6.  $up->SetDir('img/');
  7.  $up->SetThumbDir('thumb/'); // katalog z plikami miniatur
  8.  $mime_types = array('image/jpeg','image/pjpg', 'image/pjpeg', 'image/jpg');
  9.  $up->SetMime($mime_types);
  10.  
  11.  if(($num = $up->Valid()) === true) {
  12.    $file = $up->SaveFile();
  13.  
  14.    if(!$file || !file_exists($file))
  15.     echo $up->Msg(-3);
  16.    else {
  17.    $thumb = array('thumb1' => array('width' => 90, 'height' => 90, 'proporcja' => 1),
  18.                   'thumb2' => array('width' => 370, 'height' => 250, 'proporcja' => 1),
  19.                   'thumb3' => array('width' => 400, 'height' => 400, 'proporcja' => 0)
  20.                   );
  21.  
  22.     $array = $up->MakeThumb($thumb);
  23.     $array['foto'] = $file;
  24.  
  25.     foreach($array as $key => $img_path) {
  26.      echo $key . '<br><img src="' . $img_path . '"><br>';
  27.     }
  28.    }
  29.  } else {
  30.   echo $up->Msg($num);
  31.  }
  32. }
  33. ?>


Formularz taki sam :-) Pozdrawiam.
EarthCitizen
Nie mam siły o tej porze przeglądać całej klasy, ale do tablicy $mimes dodaj:

image/x-jpeg
image/x-gif

Dostałem takie z IE7 kiedyś i był kłopot...
98256
wszystko fajnie pieknie, ale sypie mi bledami, taki sam jak poprzednikowi xiaon

Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /var/www/sites/yoyo.pl/p/l/plusjaslo/class.upload.php on line 3

w dalszej czesci watku doczytalem sie ze to przez php4,
jak to zrobic zeby to zadzailalo na hostingu yoyo ?

nikt nie pomoze :/ ?
z tego co szukalem na googlach to ten skrypt jest chyba najfajniej napisany, tylko dlaczego mi to nie chodzi ? sad.gif
szukam pomocy...

juz sobie sam poradzilem - dzieki wielkie za pomoc !
tadeoooo
Odświeżam bo mam błąd ale nie wiem jak go naprawić
Cytat
Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION in /home/oui/domains/***********/public_html/upload/class.upload.php on line 17


wszystko mam dobrze tak jak było opisane ;/
eai
Hej,

jestem autorem projektu http://code.google.com/p/nweb-image/ (pobierz).
Biblioteka ma bardzo dużo możliwości, więcej niż tylko upload i resize zdjęć, np. tworzenie własnych captcha http://code.google.com/p/nweb-image/wiki/Captcha itp.


Przykłady użycia uploadu:
http://image.nweb.pl/examples/upload-01.php
http://image.nweb.pl/examples/upload-02.php
http://image.nweb.pl/examples/upload-03.php
http://image.nweb.pl/examples/upload-04.php


więcej przykładów: http://image.nweb.pl/examples/


Gdybyś miał problem, albo jakieś pytania to pisz na PW, pomogę.
ksaw
a ja mam jedno pytanie !
skrypt nadaje wgrywanym plikom na serwer nazwy w postaci np. 20100720160419236.jpg
a jak zrobić aby zapisywał pliki bez zmiany nazwy ?
czyli wgrywam 13.jpg i zapisuje 13.jpg !
lukaszk
Witam, mam pewien problem. Wszystko działa czyli wrzucane są plik na serwer tworzona miniatura ale po wykonaniu się czynności pokazuje się błąd

  1. Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 4096 bytes) in C:\Program Files\VertrigoServ\www\class.upload.php on line 128
i absolutnie nie wiem jak temu zaradzić. Proszę o pomoc. Sory za odkopanie starego przykłądu

128 linia to ten fragment

  1. $image = imagecreatefromjpeg($this->FileName());
eai
Za mało przydzielonej pamięci dla PHP.
Zwiększ memory_limit w php.ini na 128M lub więcej.
lukaszk
Ah napisałem post zanim wgrałem go na serwer gdzie mam hosting tam błąd nie wyskoczył.
Dzięki za info trafiłeś smile.gif było przydzielone tylko 8mb zmieniłem na 128 i śmiga lokalnie bez błędów.
mb83
a jakie parametry wstawić do zapytania insert w sql aby zapisywał ścieżki do wygenerowanych plików?

  1. <?php
  2. include("mod/connect.inc");
  3. ?>
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  5. <html>
  6. <head>
  7. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  8. <title>Przesyłanie plików na serwer - Administrator</title>
  9. <link rel="stylesheet" type="text/css" href="css/s.css">
  10. </head>
  11.  
  12. <body>
  13. <center><div class='logo'><a href='index.php'><img src='img/logo01.png'></a></div></center>
  14. <?php
  15. $p_pojemnosc=$_FILES['plik']['size'];//pojemnosc pliku
  16. $p_typ=$_FILES['plik']['type']; // typ pliku
  17. $p_nazwa=$_FILES['plik']['name']; // nazwa pliku
  18. $p_smiec=$_FILES['plik']['tmp_name']; // chwilowa nazwa pliku
  19. $data = $_POST['data'];
  20. $autor = $_POST['autor'];
  21. $tresc = $_POST['tresc'];
  22. $kontakt = $_POST['kontakt'];
  23. $kat = $_POST['kat'];
  24. $nazwa = $_POST['nazwa'];
  25. $file = $_POST['file'];
  26. $thumb = $_POST['thumb'];
  27.  
  28.  
  29. //wycinamy rozszerzenie z pobieranego pliku
  30. $p_roz= array_pop(explode(".", $p_nazwa));
  31.  
  32. /* odbieramy dane z pola ukrytego i zaokrąglamy je do 3 miejsca
  33.   po przecinku/dzielimy przez 1204*1024 by było w MB*/
  34. $max_size=round(($_POST['max_file_size']/1048576),3)."MB";
  35.  
  36.  
  37. //zaokrąglamy "round" do 2 miejsc po przecinku i przeliczamy rozmiar pliku na MB
  38. $poj_MB=round(($p_pojemnosc/1048576),2).'MB';
  39.  
  40. //kodujemy nasz plik metodą MD5 i dodajemy date i godzinę oraz rozszerzenie pliku
  41. $p_nazwa_zm=(md5($p_nazwa)).".".$p_roz;
  42. $folder="galeria/ogloszenia/";
  43.  
  44.  
  45. include('class.upload.php');
  46.  
  47.  
  48. $up = new Upload($_FILES['foto']);
  49. $up->SetDir('galeria/ogloszenia/'); // ustawia katalog do ktorego będzie mial wrzucic zdjęcia i miniatury
  50.  
  51. $mime_types = array('image/jpeg','image/pjpg', 'image/pjpeg', 'image/jpg');
  52. $up->SetMime($mime_types); // Metoda, która ustawia valid mime types dla plików z tablicy $mime_types
  53.  
  54. if(($num = $up->Valid()) === true) {
  55. $file = $up->SaveFile();
  56.  
  57. if(!$file || !file_exists($file))
  58. echo $up->Msg(-3); // pokazuje błąd, że plik się nie uploadnął
  59. else {
  60. // tablica do miniatur
  61. // Jeśli proporcja = 1 - ustawi proporcje, jeśli = 0 ustawi rozmiar miniatury taki jak w podanych wartościach
  62. // Moze byc dowolna ilość elementów tworzyć po prostu:
  63. // $thumb = array('element' => array('width' => 'szerokość', 'height' => 'wysokość', 'proporcja' => 'wartośc 0 lub 1'));
  64. // Stworzy tyle miniatur ile jest elementów w poniższym przykładzie tworzy dwie miniatury
  65.  
  66. $thumb = array('thumb1' => array('width' => 100, 'height' => 100, 'proporcja' => 1),
  67. 'thumb2' => array('width' => 410, 'height' => 310, 'proporcja' => 1),
  68. );
  69.  
  70. $array = $up->MakeThumb($thumb);
  71. $array['foto'] = $file;
  72.  
  73. var_dump($array); // pokazuje zawartość tablicy $array
  74. // Zwróci tablice asocjacyjna klucze 'foto', 'thumb1', 'thumb2' i wartości to pathe do plików
  75. $conn = mysql_connect($host,$user,$pass) or die('Error connecting to mysql');
  76. mysql_query("SET NAMES 'latin2'");
  77. $zapytanie=mysql_query("insert into ogloszenia values(NULL,now(),'$autor','$tresc','$kontakt','$typ','$kat','$nazwa','$file','$thumb')");
  78. echo "dodano wpis do bazy danych";
  79. }
  80. }
  81.  
  82.  
  83. ?>
  84. </body>
  85. </html>


co zmienić w tym kodzie aby nawet jesli zdjęcie nie zostanie wybrane do uploadu to wpis tak i tak zostanie zapisany do bazy?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.