Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> upload zdjęci i automatyczne tworzenie miniatur
xiaon
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.01.2009

Ostrzeżenie: (0%)
-----


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ą (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif) (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif) (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif) (IMG:http://forum.php.pl/style_emoticons/default/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. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
grubyx
post
Post #2





Grupa: Zarejestrowani
Postów: 34
Pomógł: 1
Dołączył: 5.10.2006

Ostrzeżenie: (0%)
-----


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.

Ten post edytował grubyx 16.01.2009, 14:38:46
Go to the top of the page
+Quote Post

Posty w temacie
- xiaon   upload zdjęci i automatyczne tworzenie miniatur   13.01.2009, 20:10:25
- - ayeo   @xiaon, witaj na Forum! To Twój pierwszy post ...   13.01.2009, 20:16:01
- - xiaon   Nikt nie chce mi pomóc;/;/   13.01.2009, 20:58:58
- - grubyx   Witaj, ja do takiego czegoś napisałem sobie dawno ...   14.01.2009, 06:57:45
- - xiaon   to mam utworzyć nowy php o nazwie class.upload.ph...   14.01.2009, 17:20:43
- - grubyx   Stwórz class.upload.php i do upl.php (tego co masz...   15.01.2009, 09:56:41
- - BatGraf   Przyłaczę się do prosby kolegi. Możesz to po kolei...   15.01.2009, 17:01:18
- - pooh   Ja używam czegoś takiego, może pomo...   15.01.2009, 18:49:39
- - grubyx   Ok więc robimy sobie plik class.upload.php i wrzuc...   16.01.2009, 14:27:01
- - xiaon   zrobiłem tak jak napisane wyżej i wyskoczył mi błą...   17.01.2009, 20:52:07
- - BatGraf   a u mnie bardzo ładnie chodzi. Dzieki wielkie...   18.01.2009, 17:19:31
- - grubyx   Cytat(xiaon @ 17.01.2009, 20:52:07 ) ...   19.01.2009, 14:04:42
- - endigarnek   Witam, Mógłby ktoś przerobić skrypt tak aby można ...   21.01.2009, 18:26:48
- - grubyx   Zrobiłem. Plik class.upload.php: [PHP] pobierz, p...   22.01.2009, 04:46:17
- - EarthCitizen   Nie mam siły o tej porze przeglądać całej klasy, a...   22.01.2009, 04:50:40
- - 98256   wszystko fajnie pieknie, ale sypie mi bledami, tak...   20.05.2009, 21:43:23
- - tadeoooo   Odświeżam bo mam błąd ale nie wiem jak go naprawić...   24.03.2010, 03:11:26
- - eai   Hej, jestem autorem projektu http://code.google.c...   24.03.2010, 10:03:33
- - ksaw   a ja mam jedno pytanie ! skrypt nadaje wgrywan...   20.07.2010, 15:58:33
- - lukaszk   Witam, mam pewien problem. Wszystko działa czyli w...   30.01.2011, 01:39:15
- - eai   Za mało przydzielonej pamięci dla PHP. Zwiększ mem...   30.01.2011, 08:14:51
- - lukaszk   Ah napisałem post zanim wgrałem go na serwer gdzie...   2.02.2011, 11:52:53
- - mb83   a jakie parametry wstawić do zapytania insert w sq...   2.12.2012, 11:34:02


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 13:57