W poniższym skrypcie w zwroticy switch tworzę obraz do rozmiarów o wysokości nie wiekszej niz np 600px oraz miniaturkę o wysokości nie wiekszej niz 120 px. Problem wystepuje, ze gdy przy pliku wiekszym od 600px miniaturka jest dziwnie tworzona, tzn w miniaturce jest maly obrazek a wokół ciemne pole - taj jakby były wskazywane zle rozmiary do tworzenia miniaturki.
Jak poprawic ten kod - wiem ze nie jest optymalny.

Założenia są takie by skrypt pobieral obrzek | zapisywał w wskazanym katalogu obrazek o rozmiarze nie wiekszym niz w zmiennej | tworzyl jego miniaturke o danych wymiarach.

  1. <?php
  2. case'Dodaj':
  3. $id=$_POST['kategoria_id'];
  4.  
  5. $zap = "SELECT * FROM galkat WHERE id_kategoria='$id'";
  6. $wyk = mysql_query($zap);
  7. $rzad = mysql_fetch_array($wyk);
  8. $poziom = $rzad['poziom'];
  9. //spr czy user jest zalogowany - posiada sesje i nadajemy potrzebne wartosci z sesji albo wstawiamy ZERA
  10. if (isset($_SESSION['nr']))
  11. {
  12. $nr=$_SESSION['nr'];
  13. $poziomu=$_SESSION['ranga'];
  14. }
  15. else
  16. {
  17. $nr=0;
  18. $poziomu=1;
  19. }
  20. if($poziom <= $poziomu)
  21.  { $czy=1; }
  22.  else
  23.  { $czy=; }
  24. $data = date('d-m-y G:i');
  25. $tytul = $_POST['tytul'];
  26. $tresc = $_POST['tresc'];
  27. $ip = $_SERVER['REMOTE_ADDR'];
  28. $id2 = $_POST['podkat_id'];
  29.  
  30. $obrazek = $_FILES['obrazek']['name'];
  31. // umieszczenie obrazu i sprawdzenie jego formatu
  32. $ImageDir ="image/max/";
  33.  $ImageThumb = "image/min/";
  34. $ImageName = $ImageDir . $obrazek;
  35.  
  36.  
  37. // gdy wskazany jest obrazek
  38. if (move_uploaded_file($_FILES['obrazek']['tmp_name'], $ImageName) )
  39.  {
  40.  
  41. // pobranie informacji na temat umieszczonego obrazu
  42. list($width, $height, $type, $attr) = getimagesize($ImageName);
  43.  
  44. if ( ($type == 1) or ($type==2) or ($type==3)  )
  45. {
  46.  
  47. ////////////////
  48.  $insert = "INSERT INTO foto VALUES
  49.  ('', '$id', '$id2','$nr', '$czy', '0', '$data', '$tytul', '$tresc', 'image/auto.jpg', 'image/auto.jpg','160', '120', '$ip' )";
  50.  $insertresults = mysql_query($insert)
  51. or die(mysql_error());
  52.  
  53. $lastpicid = mysql_insert_id();
  54. $newfilename = $ImageDir . $lastpicid . ".jpg";
  55. //////////////////////////////////
  56. if ($type == 2) { rename($ImageName, $newfilename); }
  57. else { if ($type == 1)  { $image_old = imagecreatefromgif($ImageName); }
  58.  elseif ($type == 3) { $image_old = imagecreatefrompng($ImageName); }
  59.  
  60. // skonwertuj obraz do formatu JPG
  61. $image_jpg = imagecreatetruecolor($width, $height);
  62. imagecopyresampled($image_jpg, $image_old, 0, 0, 0, 0,
  63.  $width, $height, $width, $height);
  64. imagejpeg($image_jpg, $newfilename);
  65. imagedestroy($image_old);
  66. imagedestroy($image_jpg);
  67.  imagedestroy($image_old);
  68. }
  69. //^^^^^^^^^^^^^^^^^
  70. if ($height > 600)
  71. {  $ilemax= $height / 600; $sz = ceil( $width / $ilemax); $wy = 600; $thumb_w = $sz; $thumb_h = $wy; }
  72.  else {  $thumb_w = $width;  $thumb_h = $height; }
  73.  
  74. $thumb_w = $sz;
  75. $thumb_h = $wy;
  76. // utwórz miniaturkę
  77. $large = imagecreatefromjpeg($newfilename);
  78. $thumba = imagecreatetruecolor($thumb_w, $thumb_h);
  79. imagecopyresampled($thumba, $large, 0, 0, 0, 0, $thumb_w, $thumb_h, $width, $height);
  80. $newfile = $newfilename;
  81. imagejpeg($thumba, $newfile);
  82.  // rename( $newthumbname, $xxx);
  83. imagedestroy($large);
  84. imagedestroy($thumba);
  85. //^^^^^^^^^^^^^
  86. $newthumbname = $ImageThumb . $lastpicid . ".jpg";
  87. // pobierz wymiary miniaturki
  88.  
  89. if ($height > 120)
  90.  { $ile= $height / 120;
  91. $szerokosc = ceil( $width / $ile);
  92. $wysokosc = 120; $thumb_width = $szerokosc;
  93.  $thumb_height = $wysokosc; }
  94. else {  $thumb_width = $width;  $thumb_height = $height; }
  95.  
  96.  
  97. $thumb_width = $szerokosc;
  98. $thumb_height = $wysokosc;
  99. // utwórz miniaturkę
  100. $largeimage = imagecreatefromjpeg($newfilename);
  101. $thumb = imagecreatetruecolor($thumb_width, $thumb_height);
  102. imagecopyresampled($thumb, $largeimage, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height);
  103. imagejpeg($thumb, $newthumbname);
  104.  // rename( $newthumbname, $xxx);
  105. imagedestroy($largeimage);
  106. imagedestroy($thumb);
  107.  /////////
  108. // obraz jest w poprawnym formacie, można kontynuować
  109. // wstawienie informacji w tabeli images
  110. $obrazek= $ImageThumb. $lastpicid . ".jpg";
  111. $obrazekxl= $ImageDir. $lastpicid . ".jpg";
  112. $insert = "UPDATE foto SET width='$szerokosc' , height='$wysokosc', obrazek='$obrazek' , obrazekxl='$obrazekxl' WHERE id='$lastpicid'";
  113.  
  114. $insertresults = mysql_query($insert)
  115. or die(mysql_error());
  116. if  (isset ($insertresults) )
  117. { echo "<script language=\"JavaScript\">
  118.  window.location=\"index.php?strona=galeria&akcja=dodano_nowa&id=$lastpicid\";
  119. </script>"; }
  120. else { echo "błąd"; }
  121. }
  122. else
  123.  {
  124. echo "Przykro nam, ale przesłany obraz nie jest w formacie gif, jpg lub " .
  125.  "png.<br>";
  126.  
  127. $lokalizacja= $ImageName;
  128.  $usuwanie = unlink($lokalizacja);
  129.  
  130. echo "Kliknij przycisk 'Wstecz' w przeglądarce i spróbuj ponownie. $lokalizacja";
  131. }
  132. }
  133.  
  134. // gdy nie wskazano obrazka  <script language=\"JavaScript\"> window.location=\"index.php?strona=ogloszenie&akcja=dodano_nowa&amp;id=$lastid\"</script>
  135.  
  136. else{ echo 'BŁAD. Nie dodano fotografii'; }
  137.  
  138. ////////////////////
  139. break;
  140. ?>