Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wgrywanie i obróbka obrazków na serwerze
Forum PHP.pl > Forum > Przedszkole
northwest
Witam serdecznie,
Kombinuje nad skryptem do pobierania i obróbki obrazków w locie... Skrypt miałby wykonywać następujące rzeczy:
- pobierać obrazek z dysku użytkownika
- sprawdzać czy wgrywany obrazek jest w 100% plikiem JPG, a jeśli nie to wywalić komunikat z błędem
- sprawdzić czy wgrywany obrazek jest mniejszy niż 1Mb, a jeśli jest większy to wywalić komunikat o błędzie
- wgrać obrazek na serwer i zmniejszyć go do rozmiarów 640x480
- być maksymalnie bezpieczny
- zapisać obrazek w mysql (to wiem jak zrobić)


Wykombinowałem coś takiego ja w poniższym listingu, ale nie do końca to działa - często zdarza się że skrypt nie zapisze
pliku na dysku, lub są problemy ze zmniejszeniem (nie wiem jak wygląda sprawa bezpieczeństwa działania tego skryptu).

Możecie mi pomóc z jakimiś modyfikacjami tego??



  1. <?php
  2. if($logo_type=="image/jpg" || $logo_type=="image/jpeg" || $logo_type=="image/pjpeg" ){
  3. if ($logo_size <= 1024000) {
  4. $path_thumbs = "temp";
  5. $losowa_nazwa = md5(microtime());
  6. $pobierz_rozszerzenie = explode ('.', $logo_name);
  7. $rozszerzenie = $pobierz_rozszerzenie[count($pobierz_rozszerzenie)-1];
  8. $dozwolone = array(".jpg",".jpeg", ".JPG",".JPEG", ".Jpg",".Jpeg");
  9. $thumb_path = substr($logo_tmp,0,strrpos($logo_tmp, '.')).'_min.jpg';
  10. $max_width = $max_height=640;
  11. $img_attr = getimagesize($logo_tmp);
  12. if($img_attr[0]>$img_attr[1])
  13. { $scale = $img_attr[0] / $max_width; }
  14.  else { $scale = $img_attr[1] / $max_height; }
  15.  $w = floor($img_attr[0]/$scale);
  16.  $h = floor($img_attr[1]/$scale);
  17.  $ext = strrchr($logo_name,'.');
  18.  $ext = strtolower($ext);
  19.  if (in_array($ext,$dozwolone))
  20.  {
  21.  $peta_plik= $nowy;
  22. $nowy = imagecreatefromjpeg($logo_tmp);
  23. $zmniejszony_obrazek = imagecreatetruecolor($w,$h);
  24. imagecopyresampled($zmniejszony_obrazek, $nowy, 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  25. imagejpeg($zmniejszony_obrazek,"$path_thumbs/$losowa_nazwa.$rozszerzenie",85);
  26. imagedestroy($zmniejszony_obrazek);
  27. imagedestroy ($nowy);
  28. $peta_plikmini = "$losowa_nazwa". "." . "$rozszerzenie"; // oryginalny mini plik na serwerze
  29. $Picture0='temp/' . "$peta_plikmini";
  30. $PSize = filesize($Picture0);
  31. $mysqlPicture0 = addslashes(fread(fopen($Picture0, "r"), $PSize));
  32. ?>
maniekl2
Ja mam coś takiego jezeli chodzi o zmiane rozdzielczości :
  1. <?php
  2. $plik = $_FILES['plik']['tmp_name'];
  3.  $newname = $liczba.'.jpg'; // $liczba pobierana jest z bazy w moim przypadku 
  4. $miejsce = 'img/'.$newname;
  5. if (is_uploaded_file($plik))
  6. { 
  7. if (!move_uploaded_file($plik,$miejsce))
  8. { 
  9. $error= &#092;"Wystapił błąd podczas uploadu zdjęcia\"; 
  10. } 
  11. }
  12. else
  13. { 
  14. $error= &#092;"Wystapił błąd podczas uploadu zdjęcia\"; 
  15. }
  16. if($error == '') { 
  17.  
  18.  $img=imagecreatefromjpeg($miejsce);
  19.  
  20.  
  21.  
  22. $x = imagesx($img);
  23. $y = imagesy($img);
  24. if($x > $y){
  25. $nx = 150; // rozmiary 
  26. $ny = 150 * ($y / $x); // rozmiary
  27. }
  28. elseif($x < $y){
  29. $nx = 150 * ($x / $y);
  30. $ny = 150;
  31. }
  32. else{
  33.  $nx = 150;
  34.  $ny = 150;
  35. }
  36. $new_img = imagecreatetruecolor($nx, $ny);
  37. imagecopyresampled($new_img, $img, 0, 0, 0, 0, $nx, $ny, $x, $y);
  38.  imagejpeg($new_img, 'img/min/'.$newname, 85);
  39.  
  40.  
  41.  unlink(&#092;"img/\".$newname.\"\");
  42. } else {
  43. echo $error;
  44. }
  45. ?>

Działa to tak że wrzuca plik na serwer później zmienia wielkość zapisuje nowy w katalogu min i usuwa stary
northwest
super, dzięki za pomoc!!:)
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.