Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Upload zjęcia + tworzenie miniatury o okreslonej szerokości
Forum PHP.pl > Forum > Przedszkole
Elber
Witam, szukam skryptu, który pozwoli mi wrzucić zdjęcie na serwer do wybranego katalogu, dodać nazwę pliku do bazy i następnie zrobi z niego miniaturkę o określonej szerokości (wysokość musiałby dopasować sam). Widział ktoś coś podobnego ?
modern-web
Skrypt przesyłania obrazka na serwer znajdziesz gdzieś w sieci lub na tym forum. Co chwile poruszany jest ten temat...
Tworzenie miniatury dodasz po prostu po przesłaniu na serwer.
Skrypt tutaj: http://www.egrafik.pl/porady/php-tworzenie...-obrazow-w-php/

Jedyne co musisz zrobić to odpowiednio skonfigurować ten kod pod własne zmienne i wymagania.
Elber
A gdzie i jak tutaj mogę ustawić na sztywno szerokość miniatury oraz by wysokość się dopasowała do szerokości ?

Cytat
<?php
function zmiana_rozmiaru($orginalny_obrazek,$docelowa_szerokosc,$docelowa_wysokosc){

// Pobranie orginalnych parametrów i kalkulacja skali
list($szerokosc, $wysokosc) = getimagesize($orginalny_obrazek);
$xskala=$szerokosc/$docelowa_szerokosc;
$yskala=$wysokosc/$docelowa_wysokosc;

// Kalkulacja nowego rozmiaru
if ($yskala>$xskala){
$nowa_szerokosc = round($szerokosc * (1/$yskala));
$nowa_wysokosc = round($wysokosc * (1/$yskala));
}
else {
$nowa_szerokosc = round($szerokosc * (1/$xskala));
$nowa_wysokosc = round($wysokosc * (1/$xskala));
}

// Zmiana rozmiaru orginalnego obrazu
$obraz_zmiana_wielkosci = imagecreatetruecolor($nowa_szerokosc, $nowa_wysokosc);
$obrazek_tymczasowy = imagecreatefromjpeg ($orginalny_obrazek);
imagecopyresampled($obraz_zmiana_wielkosci, $obrazek_tymczasowy, 0, 0, 0, 0, $nowa_szerokosc, $nowa_wysokosc, $szerokosc, $wysokosc);

return $obraz_zmiana_wielkosci;
}
?>
modern-web
Co do wymiarów miniatury - po prostu dodaj przed wszystkim zmienną $docelowa_szerokość = ileś_tam_px;
Co do automatycznej wysokości... hmmm... nie mam pewności ale spróbuj tak auto lub tak auto-set

P.S.
Używaj odpowiedniego znacznika BBcode... fragment kodu to nie cytat tylko skrypt w języku PHP dlatego następnym razem wsadź to w znacznik [*PHP][*/PHP] zamiast [*QUOTE] (bez *)
Elber
Hmmm, mam problem ze skonstruowaniem formularza <form>.... otóż chcę żeby dopuszczał tylko pliki jpg i png oraz by była możliwość uploadu trzech zdjęć...z obsługą tego w php sobie już poradzę smile.gif
Kildyt
Upload kilku zdjęć za pomocą jednego formularza to żaden problem. I tak działamy na name'ach input'ów.
Co do sprawdzenia typu pliku to musisz zrobić to w PHP. Musisz jednak pamiętać aby nie opierać się na rozszerzeniu pliku! Nigdy nie upload'uj czegoś co nie sprawdziłeś - to stwarza bardzo poważną lukę. Każde zdjęcie zapisuj przez GD (tam też sprawdź typ pliku).
Elber
No właśnie mi chodzi, by ktoś mi podał taki formularz haha.gif smile.gif Jeśli można smile.gif
Kildyt
W HTML-u? Sądzę, że to nie jest problem. Zwykły form z zadeklarowanym odpowiednim enctype i input-y z typem file o odmiennym name-ach (jeżeli chcesz dodać kilka).
Elber
winksmiley.jpg
Ok mam sobie takie formularz:

  1. <form action="index.php?adm=produkty" method="post" enctype="multipart/form-data">";
  2. Podpis:</td> <td><input type="text" name="podpis" />
  3. Zdjęcie 1:</td> <td><input type="file" name="img_1" />
  4. <input type="hidden" name="MAX_FILE_SIZE" value="655360" />
  5. <input type="submit" name="dodaj_zdjecie" value="Dodaj zdjecie" />
  6. </form>


I teraz najpierw chcę aby zdjęcie mi się zauploadowało do katalogu ../foto/ więc mam taki kod PHP ... ale coś nie działa sad.gif

  1. if(isset($_FILES['img1'])){
  2.  
  3. if($_FILES['img1']['type'] == 'image/png' or $_FILES['img1']['type'] == 'image/jpeg' or $_FILES['img1']['type'] == 'image/gif')
  4. {
  5. $x = getimagesize($_FILES['img1']['tmp_name']);
  6. if(!is_array($x) or $x[0] < 2)
  7. {
  8. die('Zły plik graficzny !');
  9. }
  10. $strUploadDir = '../foto/'.$_FILES['img1']['name'];
  11. move_uploaded_file($_FILES['img1']['tmp_name'], $strUploadDir);
  12. }
  13. else
  14. {
  15. echo 'Niedozwolony plik';
  16. }
  17.  
  18. }


//EDIT...
Już widzę.... img1 to nie img_1 smile.gif

Tylko nigdzie nie umiem znaleźć skryptu, który zrobi mi miniaturkę o określonej szerokości ze zdjęcia sad.gif
lukaskolista
Cytat(Elber @ 23.12.2010, 15:26:51 ) *
Tylko nigdzie nie umiem znaleźć skryptu, który zrobi mi miniaturkę o określonej szerokości ze zdjęcia sad.gif
to napisz swoj. Mozesz tez zmienic moj
  1. $width = 100; // Docelowa szerokosc
  2. $height = 100; // Docelowa wysokosc
  3.  
  4. $name = 'nazwa_pliku';
  5. $info = getimagesize('avatars/'.$name);
  6. $img_name = 'avatars/'.$name;
  7.  
  8. if($info[2] == IMAGETYPE_JPEG) {
  9. $avatar = imagecreatefromjpeg($img_name);
  10. } elseif($info[2] == IMAGETYPE_GIF) {
  11. $avatar = imagecreatefromgif($img_name);
  12. } elseif($info[2] == IMAGETYPE_PNG) {
  13. $avatar = imagecreatefrompng($img_name);
  14. }
  15.  
  16.  
  17. $size = getimagesize('avatars/'.$name);
  18. $resized_avatar = imagecreatetruecolor($width, $height);
  19. imagecopyresampled($resized_avatar, $avatar, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);
  20.  
  21. if($info[2] == IMAGETYPE_JPEG) {
  22. imagejpeg($resized_avatar, $img_name);
  23. } elseif($info[2] == IMAGETYPE_GIF) {
  24. imagegif($resized_avatar, $img_name);
  25. } elseif($info[2] == IMAGETYPE_PNG) {
  26. imagepng($resized_avatar, $img_name);
  27. }

nie jestem specem od GD, wiec na pewno conieco mozna poprawic. Mozesz go zmienic, poprawic, co tam chcesz.
Elber
Fajnie, ale u Ciebie wysokosc jest ustawiona na sztywno sad.gif a mi chodzi o to by się dopasowała do określonej na sztywni szerokości
modern-web
Cytat(modern-web @ 22.12.2010, 15:20:22 ) *
Co do wymiarów miniatury - po prostu dodaj przed wszystkim zmienną $docelowa_szerokość = ileś_tam_px;
Co do automatycznej wysokości... hmmm... nie mam pewności ale spróbuj tak auto lub tak auto-set


Już Ci napisałem... spróbuj; może się uda smile.gif
Elber
Cytat(modern-web @ 23.12.2010, 16:00:55 ) *
Już Ci napisałem... spróbuj; może się uda smile.gif


No właśnie nie działa sad.gif
lukaskolista
tylko mi nie mow, ze nie potrafisz sobie tego przeliczyc. Chciales resize obrazkow to masz, programowanie ma to do siebie, ze kod sie pisze, a nie kopiuje i wkleja.
modern-web
Cytat(lukaskolista @ 23.12.2010, 16:55:40 ) *
tylko mi nie mow, ze nie potrafisz sobie tego przeliczyc. Chciales resize obrazkow to masz, programowanie ma to do siebie, ze kod sie pisze, a nie kopiuje i wkleja.

Co masz na myśli mówiąc do niego "przeliczyć"? Co ma liczenie do automatycznego dopasowania wysokości do z góry ustalonej szerokości?
Elber
  1. $width = 150;
  2. $ratio = $width / $size[0];
  3. $height = $size[1] * $ratio;
  4.  
  5. $name = $_FILES['img_1']['name']
  6. $uploaddir = "../foto/";
  7. $info = getimagesize($uploaddir.$name);
  8. $img_name = $uploaddir.$name;
  9.  
  10. if($info[2] == IMAGETYPE_JPEG) {
  11. $avatar = imagecreatefromjpeg($img_name);
  12. } elseif($info[2] == IMAGETYPE_GIF) {
  13. $avatar = imagecreatefromgif($img_name);
  14. } elseif($info[2] == IMAGETYPE_PNG) {
  15. $avatar = imagecreatefrompng($img_name);
  16. }
  17.  
  18.  
  19. $size = getimagesize($uploaddir.$name);
  20. $resized_avatar = imagecreatetruecolor($width, $height);
  21. imagecopyresampled($resized_avatar, $avatar, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);
  22.  
  23. if($info[2] == IMAGETYPE_JPEG) {
  24. imagejpeg($resized_avatar, $img_name);
  25. } elseif($info[2] == IMAGETYPE_GIF) {
  26. imagegif($resized_avatar, $img_name);
  27. } elseif($info[2] == IMAGETYPE_PNG) {
  28. imagepng($resized_avatar, $img_name);
  29. }


Tak by to miało wyglądać ? BTW. co tutaj zmienić żeby ta miniaturka leciała do innego katalogu ? smile.gif
lukaskolista
Cytat
Co masz na myśli mówiąc do niego "przeliczyć"? Co ma liczenie do automatycznego dopasowania wysokości do z góry ustalonej szerokości?

Elber napisal
Cytat
Tylko nigdzie nie umiem znaleźć skryptu, który zrobi mi miniaturkę o określonej szerokości ze zdjęcia sad.gif

skad wnioskuje, ze jezeli zdjecie wyjsciowo mialo 1000x500px, a miniatura ma miec szerokosc 500px, to z proporcji pierwotnej szerokosci do szerokosci docelowej policzy sobie , przez co nalezy podzielic wysokosc, aby proporcja obrazka zostala zachowana i w tym przypadku wyjdzie mu 250px wysokosci. Podalem mu skrypt tworzenia minuaturek na tacy, nie bede robil mu takich banalnych rzeczy, jak obliczanie wysokosci.

Edit@
gdy pisalem ten post policzyl to juz sobie, wiec to nie byl problem smile.gif

Edit2@
  1. imagejpeg($resized_avatar, $img_name);
$img_name to nazwa pliku wraz ze sciezka, czyli przykladowo
  1. $img_name = 'obrazki/obrazek1.jpg
Elber
tylko coś mi wywala do tych moich wyliczeń:
Cytat
Notice: Undefined variable: size on line 23

Warning: Division by zero on line 23

Notice: Undefined variable: size on line 24


23 linia to
  1. $ratio = $width / $size[0];

24 linia to
  1. $height = $size[1] * $ratio;



a kilka linii przed i po to:

  1. $name = $_FILES['img_1']['name'];
  2. $info = getimagesize($uploaddir.$name);
  3. $img_name = $uploaddir.$name;
  4.  
  5. $width = 150;
  6. $ratio = $width / $size[0];
  7. $height = $size[1] * $ratio;
  8.  
  9. if($info[2] == IMAGETYPE_JPEG) {
  10. $avatar = imagecreatefromjpeg($img_name);
  11. } elseif($info[2] == IMAGETYPE_GIF) {
  12. $avatar = imagecreatefromgif($img_name);
  13. } elseif($info[2] == IMAGETYPE_PNG) {
  14. $avatar = imagecreatefrompng($img_name);
  15. }
lukaskolista
  1. $info = getimagesize($uploaddir.$name);
a pozniej
  1. $size = getimagesize($uploaddir.$name);
po co bo nie rozumiem? W $info masz juz wszystko, czego Ci potrzeba.

Cytat
Notice: Undefined variable: size on line 23

Warning: Division by zero on line 23

Notice: Undefined variable: size on line 24
Slownik do reki i dzialaj. Bledy mowia wszystko. Dodam ze przed bledem Warning: Division by zero on line 23 musisz sie zabezpieczyc poprzez instrukcje warunkowa. Przetlumacz te bledy, popraw skrypt i napisz. Pierwszy blad jest przez Twoja nieuwage.
Elber
OK juz widze biggrin.gif
Tylko jakość tych miniaturek coś nie za dobra jest sad.gif Da się to poprawić jakoś?
lukaskolista
http://php.net/manual/pl/function.imagepng.php tu masz odpowiedz. Manual jest na prawde git smile.gif
Elber
OK, wielkie dzięki już mi wszystko ładnie działa exclamation.gif winksmiley.jpg

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.