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


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.
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: 13.10.2025 - 19:40