Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML]Tworzenie miniaturki
Forum PHP.pl > Forum > Przedszkole
Gość
Witam,
chcialbym sie dowiedziec jak stworzyc miniaturke fotki. Mam skrypt ktory ulpoaduje fotki na serwer, ale jak zrobic zeby podczas uploadu tworzyl automatycznie miniaturke o nazwa : m_nazwapliku.jpg
Prosze o pomoc
Piniek
zainteresuj sie GD w php winksmiley.jpg
conix
Nic z tego nie kapuje haha.gif

Edit:
Gosc to ja ; D
batman
Pisane z palca, więc mógł wkraść się błąd.

  1. <?php
  2. $img = imagecreatefromjpeg('sciezka_do_obrazka'); // utworzenie obrazka na podstawie juz istniejacego
  3. $new_img = imagecreatetruecolor($new_width, $new_height); // utwozenie nowego obrazka
  4. imagecopyresampled($new_img, $img, 0, 0, 0, 0, $new_width, $new_height, $old_width, $old_height); // zmiana rozmiaru zaladowanego obrazka
  5. imagejpeg($new_img, 'sciezka_do_miniaturki'); // zapisanie miniaturki
  6. imagedestroy($new_img); // usuwanie smieci
  7.  
  8. /*
  9. $new_width, $new_height - szerokosc i iwysokosc miniaturki
  10. $old_width, $old_height - szerokosc i wysokosc oryginalnego obrazka
  11. */
  12. ?>


Użycie funkcji gwarantuje, że miniaturka będzie dobrej jakości.

Informacje na temat użytych funkcji znajdziesz w manualu. Pamiętaj, że GD jest bardzo pamięciożerne.

edit
Jeśli chcesz zrobić miniaturkę z gifa, użyj odpowiednich funkcji (znajdziesz je w manualu).
conix
Próbuje polaczyc to z tym:
  1. <?
  2. $uploaded = "uploady/". $_FILES['plik']['name'];
  3. if (is_uploaded_file($_FILES['plik']['tmp_name'])) {
  4. if ($_FILES['plik']['size'] > 1024*1024*1024) {
  5. echo 'Plik jest za duży';
  6. } else {
  7. move_uploaded_file($_FILES['plik']['tmp_name'],$uploaded);
  8. echo "Operacja przebiegła pomyślnie";
  9. }
  10. } else {
  11. echo 'Błąd przy przesyłaniu danych!';
  12. }
  13. ?>


Ale nie idzie :/
PawelC
  1. <?
  2. $uploaded = "uploady/". $_FILES['plik']['name'];
  3. if (is_uploaded_file($_FILES['plik']['tmp_name'])) {
  4. if ($_FILES['plik']['size'] > 1024*1024*1024) {
  5. echo 'Plik jest za duży';
  6. } else {
  7. move_uploaded_file($_FILES['plik']['tmp_name'],$uploaded);
  8.  
  9. $img = imagecreatefromjpeg('sciezka_do_obrazka'); // utworzenie obrazka na podstawie juz istniejacego
  10. $new_img = imagecreatetruecolor($new_width, $new_height); // utwozenie nowego obrazka
  11. imagecopyresampled($new_img, $img, 0, 0, 0, 0, $new_width, $new_height, $old_width, $old_height); // zmiana rozmiaru zaladowanego obrazka
  12. imagejpeg($new_img, 'sciezka_do_miniaturki'); // zapisanie miniaturki
  13. imagedestroy($new_img); // usuwanie smieci
  14. echo "Operacja przebiegła pomyślnie";
  15.  
  16.  
  17. }
  18. } else {
  19. echo 'Błąd przy przesyłaniu danych!';
  20. }
  21. ?>
conix
Zabawny jestes, ale tyle tez potrafie.
Co mam wpisac w
'sciezka_do_obrazka
skoro ma brac aktualnie uploadowany obrazek?
batman
Wstaw kod, który napisałem między wiersz 7 i 8. Zamiast 'sciezka_do_obrazka' użyj zmiennej $uploaded, a zamiast 'sciezka_do_miniaturki' użyj zmiennej $ulopady_thumb, która będzie miała postać:
  1. <?php
  2. $uploaded_thumb = "uploady/thumb_". $_FILES['plik']['name'];
  3. ?>
conix
Dupa, nie umie tego zrobic ;/
Piniek
to moze bys pokazal co do tej pory napislaes i gdzie masz blad albo problem bo jak narazie to "chyba" czekasz na gotowca
batman
Pojawiają jakieś błędy?
Masz włączone rozszerzenie GD?
Masz prawa do zapisu do katalogu, gdzie ładowane są zdjęcia i miniaturki?
conix
Po co mam pokazywać jak nie dziala :/
Po 2 na tym forum jest tak ze po kilkunastu minutach zawsze sie otrzymuje gotowca
PS. Niewiem jak dokladnie ma to wygladac
Piniek
no to wiedz ze na tym forum sie gotowcow nie daje (przuanjmniej nie powinno) a kod wklej bo coraz bardziej zaczynam myslec ze wcale nie probowales tego kodu napisac
conix
  1. <?
  2. $uploaded_thumb = "uploady/thumb_". $_FILES['plik']['name'];
  3. $uploaded = "uploady/_". $_FILES['plik']['name'];
  4. $uploaded = "uploady/". $_FILES['plik']['name'];
  5. if (is_uploaded_file($_FILES['plik']['tmp_name'])) {
  6. if ($_FILES['plik']['size'] > 1024*1024*1024) {
  7. echo 'Plik jest za duży';
  8. } else {
  9. move_uploaded_file($_FILES['plik']['tmp_name'],$uploaded);
  10.  
  11. $img = imagecreatefromjpeg('$uploaded'); // utworzenie obrazka na podstawie juz istniejacego
  12. $new_img = imagecreatetruecolor($new_width, $new_height); // utwozenie nowego obrazka
  13. imagecopyresampled($new_img, $img, 0, 0, 0, 0, $new_width, $new_height, $old_width, $old_height); // zmiana rozmiaru zaladowanego obrazka
  14. imagejpeg($new_img, '$uploaded_thumb'); // zapisanie miniaturki
  15. imagedestroy($new_img); // usuwanie smieci
  16. echo "Operacja przebiegła pomyślnie";
  17.  
  18.  
  19. }
  20. } else {
  21. echo 'Błąd przy przesyłaniu danych!';
  22. }
  23. ?>

I wywala tylko
Blad przy przesy...
Piniek
po pierwsze masz powtorzona zmienna
$uploaded;

a po drugie wychodzi na to ze to twoj kod wogule nie dziala bo tworznie minatur jest dopiero po pomyslnym wyslaniu pliku
batman
Czy wcześniej działało Ci wysyłanie obrazków, czy cały czas pojawiał się wspomniany komunikat?
Sprawdź, czy tak zadziała:
  1. <?php
  2. // ......
  3. if ($_FILES['plik']['size'] > 1024*1024*1024) {
  4. echo 'Plik jest za duży';
  5. }
  6. else {
  7. if (move_uploaded_file($_FILES['plik']['tmp_name'],$uploaded)) {
  8. // ......
  9. }
  10. else {
  11. echo 'blad';
  12. }
  13. }
  14. ?>
conix
^^ blad
PS. Przeciez mozesz testowac u siebie, wiec po co kazesz mi testowac
PawelC
Po to żebyś się sam nauczył na przyszłość, radzić z takimi problemami.
Piniek
Cytat(conix @ 15.03.2008, 18:01:54 ) *
^^ blad
PS. Przeciez mozesz testowac u siebie, wiec po co kazesz mi testowac

chodzi o twoje srodowisko pracy moze nie masz gd lub masz zablokowane jakies funkcje
batman
Nie każę, tylko sugeruję, poza tym SOA#1 (sprawdź na google co to znaczy).
A dlaczego u Ciebie nie działa? Nie wiem. Pewnie nie masz uprawnień do zapisu do wskazanego katalogu / katalog nie istnieje.
Jest jeszcze kilka rzeczy, której nie napisałeś/sprawdziłeś.
Czy formularz, z którego wysyłasz plik ma atrybut enctype="multipart/form-data" oraz czy w tablicy $_FILES w polu error jest jakaś wartość różna od zera.
conix
Oto formularz:
  1. <form enctype="multipart/form-data" action="up.php" method="post">
  2. <input type="file" name="plik">
  3. <input type="submit" value="Wyślij na serwer">
  4. <input type="hidden" name="MAX_FILE_SIZE" value="3000000" />
  5. </form>


batman - wiec ktory kod u ciebie smiga?

Aktualny kod wyglada tak:
  1. <?php
  2. $uploaded_thumb = "uploady/thumb_". $_FILES['plik']['name'];
  3. $uploaded = "uploady/_". $_FILES['plik']['name'];
  4. if (is_uploaded_file($_FILES['plik']['tmp_name'])) {
  5. if ($_FILES['plik']['size'] > 1024*1024*1024) {
  6. if ($_FILES['plik']['size'] > 1024*1024*1024) {
  7. echo 'Plik jest za duży';
  8. }
  9.  
  10. if (move_uploaded_file($_FILES['plik']['tmp_name'],$uploaded)) {
  11.  $img = imagecreatefromjpeg('$uploaded'); // utworzenie obrazka na podstawie juz istniejacego
  12. $new_img = imagecreatetruecolor($new_width, $new_height); // utwozenie nowego obrazka
  13. imagecopyresampled($new_img, $img, 10, 10, 10, 10, $new_width, $new_height, $old_width, $old_height); // zmiana rozmiaru zaladowanego obrazka
  14. imagejpeg($new_img, '$uploaded_thumb'); // zapisanie miniaturki
  15. imagedestroy($new_img); // usuwanie smieci
  16. echo "Operacja przebiegła pomyślnie";
  17.  
  18.  
  19. }
  20. } else {
  21. echo 'blad';
  22. }
  23. }
  24. ?>

Zawsze wywala blad, katalogi sa, atrybuty tez
Lejto
proszę
formularz:
  1. <FORM ACTION="dodaj.php" METHOD="POST" enctype="multipart/form-data">
  2. <input class=form9 type="file" name="obraz" size="67"><br>
  3. <INPUT name="send" TYPE="submit" class="form11" value="Wyślij">

dodaj.php
  1. <?php
  2. $typ_pliku = $_FILES['obraz']['type'];
  3.  
  4.  
  5.  
  6. switch($typ_pliku)
  7.  
  8. {
  9.  
  10. case 'image/jpeg':
  11.  
  12. $pref_gd = "jpeg";
  13.  
  14. break;
  15.  
  16. case 'image/png':
  17.  
  18. $pref_gd = "png";
  19.  
  20. break;
  21.  
  22.  case 'image/pjpeg':
  23.  
  24. $pref_gd = "jpeg";
  25.  
  26. break;
  27.  
  28. }
  29.  
  30.  
  31.  
  32.  
  33.  
  34. //koniec ustala typ mime pliku i tworzy odpowiedni prefix dla funkcji GD
  35.  
  36.  
  37.  
  38.  
  39.  
  40. $nazwa1 = Date("His");//wykorzystanie daty do wygenerowania nowej nazwy dla pliku
  41.  
  42. $nazwa2 = $_FILES['obraz']['name'];//pobranie nazwy pliku z tablicy
  43.  
  44. $nazwa_zmieniona = "$nazwa1$nazwa2";//połączenie daty z nazwą pliku
  45.  
  46.  
  47.  
  48. //zamienia polskie litery z języczkami aby nie znalazły się w nazwie fotki
  49.  
  50. $nazwa_zmieniona = strtolower($nazwa_zmieniona);
  51.  
  52. $nazwa_zmieniona = ereg_replace(" ","_",$nazwa_zmieniona);
  53.  
  54. $nazwa_zmieniona = ereg_replace("ą","a",$nazwa_zmieniona);
  55.  
  56. $nazwa_zmieniona = ereg_replace("ę","e",$nazwa_zmieniona);
  57.  
  58. $nazwa_zmieniona = ereg_replace("ź","z",$nazwa_zmieniona);
  59.  
  60. $nazwa_zmieniona = ereg_replace("ż","z",$nazwa_zmieniona);
  61.  
  62. $nazwa_zmieniona = ereg_replace("ó","o",$nazwa_zmieniona);
  63.  
  64. $nazwa_zmieniona = ereg_replace("ł","l",$nazwa_zmieniona);
  65.  
  66. $nazwa_zmieniona = ereg_replace("ś","s",$nazwa_zmieniona);
  67.  
  68. $nazwa_zmieniona = ereg_replace("Ś","s",$nazwa_zmieniona);
  69.  
  70. $nazwa_zmieniona = ereg_replace("ć","c",$nazwa_zmieniona);
  71.  
  72.  
  73.  
  74. $file = "./obrazy/".$nazwa_zmieniona.""; //dodaje adres i nazwę zdjęcia do zmiennej, która jet także wykorzystywana podczas
     tworzenia miniatury w pliku create_min
  75.  
  76.  
  77.  
  78. move_uploaded_file($_FILES['obraz']['tmp_name'],"./obrazy/".$nazwa_zmieniona);//wgrywa plik na serwer
  79.  
  80.  
  81.  
  82.  
  83.  
  84. chmod($file, 0755);
  85.  
  86.  
  87.  
  88. if (file_exists("./obrazy/".$nazwa_zmieniona)) { include ("create_min.php");} //tworzy
  89. ?>

i create_min.php
  1. <?php
  2. $obrazek_minn = "$nazwa_zmieniona";
  3.  
  4. $max_width = 150;//default 150
  5.  
  6. $max_height = 113;//default 300
  7.  
  8. $size = @getimagesize($file);
  9.  
  10. $width = $size[0];
  11.  
  12. $height = $size[1];
  13.  
  14. $x_ratio = $max_width / $width;
  15.  
  16. $y_ratio = $max_height / $height;
  17.  
  18. if(($width <= $max_width) && ($height <= $max_height))
  19.  
  20. {
  21.  
  22.  $tn_width = $width;
  23.  
  24.  $tn_height = $height;
  25.  
  26. }
  27.  
  28. else if(($x_ratio * $height) < $max_height)
  29.  
  30. {
  31.  
  32.  $tn_height = ceil($x_ratio * $height);
  33.  
  34.  $tn_width = $max_width;
  35.  
  36. }
  37.  
  38. else
  39.  
  40. {
  41.  
  42.  $tn_width = ceil($y_ratio * $width);
  43.  
  44.  $tn_height = $max_height;
  45.  
  46. }
  47.  
  48.  
  49.  
  50. $func_plus_prefix_1 = "ImageCreateFrom".$pref_gd;
  51.  
  52. $func_plus_prefix_2 = "image".$pref_gd;
  53.  
  54.  
  55.  
  56. $src = @$func_plus_prefix_1($file);
  57.  
  58. $dst = @imagecreatetruecolor($tn_width, $tn_height);
  59.  
  60. @imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height, $width, $height);
  61.  
  62. //Header('Content-type: image/jpeg');
  63.  
  64. @$func_plus_prefix_2($dst, "./miniatury/".$obrazek_minn, 100);
  65.  
  66.  
  67.  
  68. //koniec tworzenia miniatury
  69. ?>

na 100% działa
conix
thx smile.gif
pozdro
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.