Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Upload zjęcia + tworzenie miniatury o okreslonej szerokości
Elber
post 22.12.2010, 15:02:26
Post #1





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


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 ?


--------------------
GG: 564555
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
modern-web
post 22.12.2010, 15:06:55
Post #2





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


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.


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
Elber
post 22.12.2010, 15:11:50
Post #3





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


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;
}
?>


--------------------
GG: 564555
Go to the top of the page
+Quote Post
modern-web
post 22.12.2010, 15:20:22
Post #4





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


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 *)

Ten post edytował modern-web 22.12.2010, 15:21:42


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
Elber
post 22.12.2010, 18:22:02
Post #5





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


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


--------------------
GG: 564555
Go to the top of the page
+Quote Post
Kildyt
post 22.12.2010, 18:32:09
Post #6





Grupa: Zarejestrowani
Postów: 869
Pomógł: 53
Dołączył: 20.10.2003
Skąd: Przeworsk

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


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


--------------------
Go to the top of the page
+Quote Post
Elber
post 22.12.2010, 18:54:51
Post #7





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


No właśnie mi chodzi, by ktoś mi podał taki formularz haha.gif smile.gif Jeśli można smile.gif


--------------------
GG: 564555
Go to the top of the page
+Quote Post
Kildyt
post 22.12.2010, 19:38:48
Post #8





Grupa: Zarejestrowani
Postów: 869
Pomógł: 53
Dołączył: 20.10.2003
Skąd: Przeworsk

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


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


--------------------
Go to the top of the page
+Quote Post
Elber
post 23.12.2010, 15:26:51
Post #9





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


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

Ten post edytował Elber 23.12.2010, 15:07:32


--------------------
GG: 564555
Go to the top of the page
+Quote Post
lukaskolista
post 23.12.2010, 15:31:43
Post #10





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


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.

Ten post edytował lukaskolista 23.12.2010, 15:33:34
Go to the top of the page
+Quote Post
Elber
post 23.12.2010, 15:56:16
Post #11





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


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


--------------------
GG: 564555
Go to the top of the page
+Quote Post
modern-web
post 23.12.2010, 16:00:55
Post #12





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


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


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
Elber
post 23.12.2010, 16:29:56
Post #13





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


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


--------------------
GG: 564555
Go to the top of the page
+Quote Post
lukaskolista
post 23.12.2010, 16:55:40
Post #14





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


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.
Go to the top of the page
+Quote Post
modern-web
post 23.12.2010, 17:02:38
Post #15





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


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?


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
Elber
post 23.12.2010, 17:11:51
Post #16





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


  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


--------------------
GG: 564555
Go to the top of the page
+Quote Post
lukaskolista
post 23.12.2010, 17:15:01
Post #17





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


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


Ten post edytował lukaskolista 23.12.2010, 17:20:23
Go to the top of the page
+Quote Post
Elber
post 23.12.2010, 17:27:51
Post #18





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


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


Ten post edytował Elber 23.12.2010, 17:32:05


--------------------
GG: 564555
Go to the top of the page
+Quote Post
lukaskolista
post 23.12.2010, 17:33:19
Post #19





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


  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.

Ten post edytował lukaskolista 23.12.2010, 17:34:08
Go to the top of the page
+Quote Post
Elber
post 23.12.2010, 17:34:16
Post #20





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


OK juz widze biggrin.gif
Tylko jakość tych miniaturek coś nie za dobra jest sad.gif Da się to poprawić jakoś?


--------------------
GG: 564555
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:22