Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Problem z zapisaniem zdjęcia ze zmienioną wielkością
goofynow
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 10.03.2012

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


Witam mam problem. Chciałem aby dodawane zdjęcia zmieniało sie na przeliczona wielkość ,a i tak sie zapisuje jako orginalna wielkość. Więc co robie źle? Manuala przglądałem i nadal nie mam pojęcia o co biega.

  1. if (move_uploaded_file($_FILES['image_filename']['tmp_name'],
  2. $ImageName)) {
  3.  
  4. // pobranie informacji na temat umieszczonego obrazu
  5. list($width, $height, $type, $attr) = getimagesize($ImageName);
  6.  
  7.  
  8. if ($type > 3) {
  9. echo "Przykro nam, ale przesłany obraz nie jest w formacie GIF, JPG lub " .
  10. "PNG.<br>";
  11. echo "Kliknij przycisk 'Wstecz' w przeglądarce i spróbuj ponownie.";
  12. } else {
  13.  
  14.  
  15. // wstawienie informacji w tabeli images
  16.  
  17. $insert = "INSERT INTO img
  18. (img_nazwa, img_date, img_fot, img_min,img_kat)
  19. VALUES
  20. ('$img_nazwa', '$today', '$img_fot', '$img_min', '$img_kat')";
  21. $insertresults = mysql_query($insert)
  22.  
  23. $lastpicid = mysql_insert_id();
  24.  
  25. $newfilename = $ImageDir . $lastpicid . ".jpg";
  26.  
  27. // przeliczenie wielkości zdjęcia
  28. $max_width = 1024;
  29. $max_height = 1024;
  30.  
  31. $new_width = $max_width;
  32. $ratio = $max_width / $width;
  33. $new_height = $height * $ratio;
  34.  
  35.  
  36. if ($type == 2) {
  37. rename($ImageName, $newfilename);
  38. } else {
  39. if ($type == 1) {
  40. $image_old = imagecreatefromgif($ImageName);
  41. } elseif ($type == 3) {
  42. $image_old = imagecreatefrompng($ImageName);
  43. }
  44. // skonwertuj obraz do formatu JPG
  45. $image_jpg = imagecreatetruecolor($new_width, $new_height);
  46. imagecopyresampled($image_jpg, $image_old, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
  47. imagejpeg($image_jpg, $newfilename);
  48. imagedestroy($image_old);
  49. imagedestroy($image_jpg);
  50. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
jaslanin
post
Post #2





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

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


teraz widzę o co chodzi, nie pomniejsza Ci plików jpg ponieważ dla plikom jpg tylko zmieniasz nazwę:

  1. if ($type == 2) {
  2. rename($ImageName, $newfilename);
  3. } else {
  4. if ($type == 1) {
  5. $image_old = imagecreatefromgif($ImageName);
  6. } elseif ($type == 3) {
  7. $image_old = imagecreatefrompng($ImageName);
  8. }
  9. // skonwertuj obraz do formatu JPG
  10. $image_jpg = imagecreatetruecolor($new_width, $new_height);
  11. imagecopyresampled($image_jpg, $image_old, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
  12. imagejpeg($image_jpg, $newfilename);
  13. imagedestroy($image_old);
  14. imagedestroy($image_jpg);
  15. }


  1. if ($type == 2) {
  2. rename($ImageName, $newfilename);
  3. } else {


a kod pomniejszający napisany później nie jest uruchamiany

dodatkowo jeszcze jak najpierw pomniejszasz obrazek a potem robisz z pomniejszonego miniaturkę, to w funkcji imagecopyresampled musisz zmienić źródłową długość i źródłową wysokość na te ze źródłowego obrazka bo inaczej będziesz miał czarne paski w miniaturce

tj musisz to zmienić tak:

  1. // utwórz miniaturkę
  2. $largeimage = imagecreatefromjpeg($newfilename);
  3. $thumb = imagecreatetruecolor($thumb_width, $thumb_height);
  4. imagecopyresampled($thumb, $largeimage, 0, 0, 0, 0, $thumb_width, $thumb_height, $new_width, $new_height);
  5. imagejpeg($thumb, $newthumbname);
  6. imagedestroy($largeimage);
  7. imagedestroy($thumb);


albo robić miniaturkę z oryginalnego obrazka który był uploadowany

Tu masz ostateczny działający testowy kod który zrobiłem:

  1. <form action='' method='POST' enctype='multipart/form-data'>
  2.  
  3. <input name='image_filename' type='file'>
  4. <input type='submit' value='wyslij'>
  5.  
  6. </form>
  7.  
  8. <?php
  9. // udostępnienie zmiennych
  10. $img_nazwa = 'asd.jpg';
  11. $img_fot = "fot/";
  12. $img_min = "fot/min/";
  13. $image_tempname = $_FILES['image_filename']['name'];
  14. $today = date("Y-m-d");
  15.  
  16.  
  17.  
  18. // umieszczenie obrazu i sprawdzenie jego formatu
  19. $ImageDir = "fot/";
  20.  
  21.  
  22. // folder minaturek
  23. $ImageThumb = $ImageDir . "min/";
  24.  
  25.  
  26. $ImageName = $ImageDir . $image_tempname;
  27.  
  28. if (move_uploaded_file($_FILES['image_filename']['tmp_name'], $ImageName)) {
  29.  
  30. // pobranie informacji na temat umieszczonego obrazu
  31. list($width, $height, $type, $attr) = getimagesize($ImageName);
  32.  
  33.  
  34. if ($type > 3) {
  35. echo "Przykro nam, ale przesłany obraz nie jest w formacie GIF, JPG lub " .
  36. "PNG.<br>";
  37. echo "Kliknij przycisk 'Wstecz' w przeglądarce i spróbuj ponownie.";
  38. } else {
  39.  
  40.  
  41. // wstawienie informacji w tabeli images
  42.  
  43.  
  44. $lastpicid = 55;
  45.  
  46. $newfilename = $ImageDir . $lastpicid . ".jpg";
  47.  
  48. // przeliczenie wielkości zdjęcia
  49. $max_width = 1024;
  50. $max_height = 1024;
  51.  
  52. $new_width = $max_width;
  53. $ratio = $max_width / $width;
  54. $new_height = $height * $ratio;
  55.  
  56.  
  57. if (in_array($type, array(1, 2, 3))) {
  58. switch ($type) {
  59. case 1:
  60. $image_old = imagecreatefromjpeg($ImageName);
  61. break;
  62. case 2:
  63. $image_old = imagecreatefromjpeg($ImageName);
  64. break;
  65. case 3:
  66. $image_old = imagecreatefrompng($ImageName);
  67. break;
  68.  
  69. default:
  70. break;
  71. }
  72.  
  73. // skonwertuj obraz do formatu JPG
  74. $image_jpg = imagecreatetruecolor($new_width, $new_height);
  75. imagecopyresampled($image_jpg, $image_old, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
  76. imagejpeg($image_jpg, $newfilename);
  77. imagedestroy($image_old);
  78. imagedestroy($image_jpg);
  79. }
  80.  
  81.  
  82. $newthumbname = $ImageThumb . $lastpicid . ".jpg";
  83.  
  84. // pobierz wymiary miniaturki
  85. $thumb_width = $width * 0.10;
  86. $thumb_height = $height * 0.10;
  87.  
  88. // utwórz miniaturkę
  89. $largeimage = imagecreatefromjpeg($newfilename);
  90. $thumb = imagecreatetruecolor($thumb_width, $thumb_height);
  91. imagecopyresampled($thumb, $largeimage, 0, 0, 0, 0, $thumb_width, $thumb_height, $new_width, $new_height);
  92. imagejpeg($thumb, $newthumbname);
  93. imagedestroy($largeimage);
  94. imagedestroy($thumb);
  95. }
  96. }
  97. ?>


(wywaliłem z niego db i ustawiłem parę zmiennych ale ogólne działanie jest widoczne)

Przesyłam jeszcze raz kod bo zauważyłem że źle ustawiłem pliki gif, a szybka edycja poprzedniego postu nie działa poprawnie

  1. <form action='' method='POST' enctype='multipart/form-data'>
  2.  
  3. <input name='image_filename' type='file'>
  4. <input type='submit' value='wyslij'>
  5.  
  6. </form>
  7.  
  8. <?php
  9. // udostępnienie zmiennych
  10. $img_nazwa = 'asd.jpg';
  11. $img_fot = "fot/";
  12. $img_min = "fot/min/";
  13. $image_tempname = $_FILES['image_filename']['name'];
  14. $today = date("Y-m-d");
  15.  
  16.  
  17.  
  18. // umieszczenie obrazu i sprawdzenie jego formatu
  19. $ImageDir = "fot/";
  20.  
  21.  
  22. // folder minaturek
  23. $ImageThumb = $ImageDir . "min/";
  24.  
  25.  
  26. $ImageName = $ImageDir . $image_tempname;
  27.  
  28. if (move_uploaded_file($_FILES['image_filename']['tmp_name'], $ImageName)) {
  29.  
  30. // pobranie informacji na temat umieszczonego obrazu
  31. list($width, $height, $type, $attr) = getimagesize($ImageName);
  32.  
  33.  
  34. if ($type > 3) {
  35. echo "Przykro nam, ale przesłany obraz nie jest w formacie GIF, JPG lub " .
  36. "PNG.<br>";
  37. echo "Kliknij przycisk 'Wstecz' w przeglądarce i spróbuj ponownie.";
  38. } else {
  39.  
  40.  
  41. // wstawienie informacji w tabeli images
  42.  
  43.  
  44. $lastpicid = 55;
  45.  
  46. $newfilename = $ImageDir . $lastpicid . ".jpg";
  47.  
  48. // przeliczenie wielkości zdjęcia
  49. $max_width = 1024;
  50. $max_height = 1024;
  51.  
  52. $new_width = $max_width;
  53. $ratio = $max_width / $width;
  54. $new_height = $height * $ratio;
  55.  
  56.  
  57. if (in_array($type, array(1, 2, 3))) {
  58. switch ($type) {
  59. case 1:
  60. $image_old = imagecreatefromgif($ImageName);
  61. break;
  62. case 2:
  63. $image_old = imagecreatefromjpeg($ImageName);
  64. break;
  65. case 3:
  66. $image_old = imagecreatefrompng($ImageName);
  67. break;
  68.  
  69. default:
  70. break;
  71. }
  72.  
  73. // skonwertuj obraz do formatu JPG
  74. $image_jpg = imagecreatetruecolor($new_width, $new_height);
  75. imagecopyresampled($image_jpg, $image_old, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
  76. imagejpeg($image_jpg, $newfilename);
  77. imagedestroy($image_old);
  78. imagedestroy($image_jpg);
  79. }
  80.  
  81.  
  82. $newthumbname = $ImageThumb . $lastpicid . ".jpg";
  83.  
  84. // pobierz wymiary miniaturki
  85. $thumb_width = $width * 0.10;
  86. $thumb_height = $height * 0.10;
  87.  
  88. // utwórz miniaturkę
  89. $largeimage = imagecreatefromjpeg($newfilename);
  90. $thumb = imagecreatetruecolor($thumb_width, $thumb_height);
  91. imagecopyresampled($thumb, $largeimage, 0, 0, 0, 0, $thumb_width, $thumb_height, $new_width, $new_height);
  92. imagejpeg($thumb, $newthumbname);
  93. imagedestroy($largeimage);
  94. imagedestroy($thumb);
  95. }
  96. }
  97. ?>




Ten post edytował jaslanin 30.03.2012, 11:24:02
Go to the top of the page
+Quote Post

Posty w temacie


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: 17.10.2025 - 17:08