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%)
-----


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ć (IMG:http://forum.php.pl/style_emoticons/default/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ć
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 00:08