Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapisywanie zdjęć, miniatur
Forum PHP.pl > Forum > PHP
tiko35
witam, chciałbym zapytać Was czy poniższy kod jest poprawny - kod przedstawia dodawanie miniaturek i całych zdjęć oraz tworzenie dla nich cieni(kod działa, ale są pewne mankamenty: duże zdjęcia jak i miniaturki są mocno kompresowane przez co zdjęcia tracą na jakości, zdjęcia są kilka razy zapisywane na dysku, jak zrobić by były zapisywane tylko raz) Za wszelką pomoc będę wdzięczny. Oto kod:
  1. <?php
  2. include("dane.php");
  3. $result_final = "";
  4. $counter = 0;
  5. $photos_uploaded = $_FILES['plik'];
  6. $photo_captions = $_POST['nazwa'];
  7. $opis = $_POST['opis'];
  8. $kategoria = $_POST['kategoria'];
  9. $miejsce = $_POST['miejsce'];
  10. $data = $_POST['data'];
  11. $known_photo_types = array(
  12. 'image/pjpeg' => 'jpg',
  13. 'image/jpeg' => 'jpg',
  14. 'image/gif' => 'gif',
  15. 'image/bmp' => 'bmp',
  16. 'image/x-png' => 'png'
  17. );
  18.  
  19. $gd_function_suffix = array(
  20. 'image/pjpeg' => 'JPEG',
  21. 'image/jpeg' => 'JPEG',
  22. 'image/gif' => 'GIF',
  23. 'image/bmp' => 'WBMP',
  24. 'image/x-png' => 'PNG'
  25. );
  26.  
  27. while( $counter <= count($photos_uploaded) )
  28. {
  29. if($photos_uploaded['size'][$counter] > 0)
  30. {
  31. if(!array_key_exists($photos_uploaded['type'][$counter], $known_photo_types))
  32. {
  33. $result_final .= "Plik ".($counter+1)." nie jest zdjęciem.<br />";
  34. }
  35. else
  36. {
  37. if(!empty($_POST['data'][$counter]))
  38. {
  39. $data = strip_tags($_POST['data'][$counter]);
  40. $wyn = mysqli_query($dbc,"SELECT data,id FROM data_zdj WHERE data LIKE '$data'");
  41. if(mysqli_num_rows($wyn) > 0)
  42. {
  43. $id_wlasciwe = mysqli_fetch_array($wyn);
  44. $id_daty = $id_wlasciwe['id'];
  45. }
  46. else
  47. {
  48. $rezultat = mysqli_query($dbc,"INSERT INTO data_zdj(data) VALUES('$data')");
  49. $id_daty = mysqli_insert_id($dbc);
  50. }
  51. }
  52. else
  53. {
  54. $id_daty ='NULL';
  55. }
  56.  
  57. if(!empty($_POST['miejsce'][$counter]))
  58. {
  59. $miejsce = strip_tags($_POST['miejsce'][$counter]);
  60. $wyn = mysqli_query($dbc,"SELECT miejsce,id FROM miejsce_zdj WHERE miejsce LIKE '$miejsce'");
  61. if(mysqli_num_rows($wyn) > 0)
  62. {
  63. $id_wlasciwe = mysqli_fetch_array($wyn);
  64. $id_miejsca = $id_wlasciwe['id'];
  65. }
  66. else
  67. {
  68. $rezultat = mysqli_query($dbc,"INSERT INTO miejsce_zdj(miejsce) VALUES('$miejsce')");
  69. $id_miejsca = mysqli_insert_id($dbc);
  70. }
  71. }
  72. else
  73. {
  74. $id_miejsca='NULL';
  75. }
  76.  
  77. if(!empty($_POST['kategoria'][$counter]))
  78. {
  79. $kategoria = strip_tags($_POST['kategoria'][$counter]);
  80. $wyn = mysqli_query($dbc,"SELECT kategoria.nazwa,id FROM kategoria WHERE kategoria.nazwa LIKE '$kategoria'");
  81. if(mysqli_num_rows($wyn) > 0)
  82. {
  83. $id_wlasciwe = mysqli_fetch_array($wyn);
  84. $id_kategorii = $id_wlasciwe['id'];
  85. }
  86. else
  87. {
  88. $rezultat = mysqli_query($dbc,"INSERT INTO kategoria(nazwa) VALUES('$kategoria')");
  89. $id_kategorii = mysqli_insert_id($dbc);
  90. }
  91. }
  92. else
  93. {
  94. $id_kategorii='NULL';
  95. }
  96.  
  97. if(!empty($_POST['opis'][$counter]))
  98. {
  99. $opis = strip_tags($_POST['opis'][$counter]);
  100. }
  101. else
  102. {
  103. $opis ='NULL';
  104. }
  105.  
  106. if(!empty($_POST['tytul'][$counter]))
  107. {
  108. $tytul = strip_tags($_POST['tytul'][$counter]);
  109. }
  110. else
  111. {
  112. $tytul ='';
  113. }
  114.  


  1. $dodano[$counter] = date("Y-m-d G:i:s");
  2. echo $dodano[$counter];
  3.  
  4. mysqli_query($dbc,"INSERT INTO zdjecie(plik,nazwa,id_kategorii,id_miejsca,id_daty,opis,dodano,tytul)
  5. VALUES('0', '".$photo_captions[$counter]."',$id_kategorii,$id_miejsca,$id_daty,'$opis','$dodano[$counter]','".$tytul."')" );
  6. $new_id = mysqli_insert_id($dbc);
  7. $filetype = $photos_uploaded['type'][$counter];
  8. $extention = $known_photo_types[$filetype];
  9. $filename = $new_id.".".$extention;
  10. mysqli_query( $dbc,"UPDATE zdjecie SET plik='".addslashes($filename)."' WHERE id='".addslashes($new_id)."'" );
  11. copy($photos_uploaded['tmp_name'][$counter],"../".$images_dir."/".$filename);
  12. $size = GetImageSize( '../'.$images_dir."/".$filename );
  13. /*wielkość miniaturek*/
  14. if($size[0] > $size[1])
  15. {
  16. $thumbnail_width = 150;
  17. $thumbnail_height = (int)(150 * $size[1] / $size[0]);
  18. }
  19. else
  20. {
  21. $thumbnail_width = (int)(150 * $size[0] / $size[1]);
  22. $thumbnail_height = 150;
  23. }
  24. $as = $size[0];
  25. $bs = $size[1];
  26. $function_suffix = $gd_function_suffix[$filetype];
  27. $function_to_read = "ImageCreateFrom".$function_suffix;
  28. $function_to_write = "Image".$function_suffix;
  29. $source_handle = $function_to_read ( "../".$images_dir."/".$filename );
  30. if($source_handle)
  31. {
  32. $cos = ImageCreateTrueColor ( $as, $bs );
  33. ImageCopyResampled( $cos, $source_handle, 0, 0, 0, 0, $as, $bs, $size[0], $size[1] );
  34. $destination_handle = ImageCreateTrueColor ( $thumbnail_width, $thumbnail_height );
  35. ImageCopyResampled( $destination_handle, $source_handle, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height, $size[0], $size[1] );
  36. }
  37. $function_to_write( $cos, "../".$images_dir."/".$filename );
  38. //zapisuje miniaturki
  39. $function_to_write( $destination_handle, "../".$images_dir."/tb_".$filename );
  40. //ważne! - tu ustalam kolor mojego tła
  41. $background = array( "r" => 218 , "g" => 215 , "b" => 200 );
  42. $src = '../zdjecia/tb_'.$filename;
  43. list( $o_width , $o_height ) = getimagesize ( $src );
  44. $width = $o_width + DS_OFFSET ;
  45. $height = $o_height + DS_OFFSET ;
  46. $image = imagecreatetruecolor ( $width , $height );
  47. $step_offset = array( "r" => ( $background [ "r" ] / DS_STEPS ), "g" => ( $background [ "g" ] / DS_STEPS ), "b" => ( $background [ "b" ] / DS_STEPS ));
  48. $current_color = $background ;
  49. for ( $i = 0 ; $i <= DS_STEPS ; $i ++) {
  50. $colors [ $i ] = imagecolorallocate ( $image , round ( $current_color [ "r" ]), round ( $current_color [ "g" ]), round ( $current_color [ "b" ]));
  51. $current_color [ "r" ] -= $step_offset [ "r" ];
  52. $current_color [ "g" ] -= $step_offset [ "g" ];
  53. $current_color [ "b" ] -= $step_offset [ "b" ];
  54. }
  55. imagefilledrectangle ( $image , 0 , 0 , $width , $height , $colors [ 0 ]);
  56. for ( $i = 0 ; $i < count ( $colors ); $i ++) {
  57. imagefilledrectangle ( $image , DS_OFFSET , DS_OFFSET , $width , $height , $colors [ $i ]);
  58. $width -= DS_SPREAD ;
  59. $height -= DS_SPREAD ;
  60. }
  61. $original_image = imagecreatefromjpeg ( $src );
  62. imagecopymerge ( $image , $original_image , 0 , 0 , 0 , 0 , $o_width , $o_height , 100 );
  63. $function_to_write( $image, "../".$images_dir."/tb_".$filename );
  64. $result_final .= "<img src='../".$images_dir. "/tb_".$filename."' /> Dodano ".($counter+1)." zdjęcie.<br />";
  65. }
  66. }
  67. $counter++;
  68. }
  69. echo <<<__HTML_END
  70. <html>
  71. <head>
  72. <title>Upload plików</title>
  73. </head>
  74. <body>
  75. $result_final
  76. </body>
  77. </html>
  78. __HTML_END;
  79. ?>
quality
Wkleiłes cały kod aplikacji i myslisz ze ktos bedzie mial czas to studiowac ?

Do miniuturek nawet z cieniem polecam klase phpThumb zamiast 200 lini kodu masz 2 smile.gif

Pozdrawiam
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.