Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Zmniejszanie rozmiaru zdjęcia podczas uploadu
adiseq
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 20.11.2011

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


Witam serdecznie,

Staram się zrobić skrypt w którym użytkownik może zmieniać dane wizytówki na stronie. Bardzo prosta strona, kilka danych jak nazwa firmy email i nr tel oraz logo firmy. Udało mi się zrobić że po zalogowaniu użytkownik widzi zapisane dane w bazie i ma możliwość je edytować. Zdjęcie, wgrywa do folderu UPLOADS a ścieżkę do zdjęcia dopisuje do danego użytkownika w bazie. Wszystko ok. Problem polega na tym, że chciałbym ustawić aby zdjęcie które wgrywają użytkownicy zmieniało się do rozmiaru np 640px x 400 px. Ma to być tylko małe logo widoczne w wizytówce, a nie wielki obraz, który będzie mi zaśmiecał serwer.

Poniżej kod formularza:
  1. <?php if ($_SESSION['auth'] == TRUE)
  2. {
  3. echo 'Zalogowany jest: '. $_SESSION['user'];
  4. require_once('db.php');
  5. $id_user=$_SESSION['user'];
  6. $sql=mysql_query("select * from user where login='$id_user'");
  7. $row = mysql_fetch_array($sql);
  8. echo '<form enctype="multipart/form-data" method="POST" action="edytuj.php">';
  9. echo '<b>Nazwa firmy:</b><br /> ';
  10. echo '<input type="text" size=30 name="nazwa" disabled value="'.$row['nazwa'].'"><br />';
  11. echo '<b>NIP:</b><br /> ';
  12. echo '<input type="text" size=30 name="nip" disabled value="'.$row['nip'].'"><br />';
  13. echo '<b>Kod pocztowy:</b><br /> ';
  14. echo '<input type="text" size=30 name="kodp" value="'.$row['kodp'].'"><br />';
  15. echo '<b>Miejscowość:</b><br /> ';
  16. echo '<input type="text" size=30 name="miejscowosc" value="'.$row['miejscowosc'].'"><br />';
  17. echo '<b>Adres:</b><br /> ';
  18. echo '<input type="text" size=30 name="ulica" value="'.$row['ulica'].'"><br />';
  19. echo '<b>Telefon:</b><br /> ';
  20. echo '<input type="text" size=30 name="telefon" value="'.$row['telefon'].'"><br />';
  21. echo '<b>E-mail:</b><br /> ';
  22. echo '<input type="text" size=30 name="email" value="'.$row['email'].'"><br />';
  23. echo '<b>Strona www:</b><br /> ';
  24. echo '<input type="text" size=30 name="strona" value="'.$row['strona'].'"><br />';
  25. echo '<b>Opis:</b><br /> ';
  26. echo '<input type="text" size=30 name="opis" value="'.$row['opis'].'"><br />';
  27. echo '<b>Logo:</b><br /> ';
  28. echo '<input type="file" name="plik" id="plik"><br />';
  29. echo '<img src="'. $row['logo'] . '" /><br />';
  30.  
  31. echo '<input type="submit" value="Zmień" /> ';
  32. echo '</form>';
  33. echo ''.$row['nazwa'].'<br />';
  34. echo '<a href="index.php?logout">Wyloguj się</a>';
  35. }


a teraz kod z edytuj.php

  1. <?php if ($_SESSION['auth'] == TRUE) {
  2.  
  3. $id_user=$_SESSION['user'];
  4. // odbieramy dane z formularza
  5. $kodp = $_POST['kodp'];
  6. $miejscowosc = $_POST['miejscowosc'];
  7. $ulica = $_POST['ulica'];
  8. $telefon = $_POST['telefon'];
  9. $email = $_POST['email'];
  10. $strona = $_POST['strona'];
  11. $opis = $_POST['opis'];
  12.  
  13.  
  14. $connection = @mysql_connect($dbhost, $dblogin, $dbpass)
  15. or die('Brak połączenia z serwerem MySQL');
  16. $db = @mysql_select_db('adiseq_hf', $connection)
  17. or die('Nie mogę połączyć się z bazą danych');
  18.  
  19.  
  20. $plik_tmp = $_FILES['plik']['tmp_name'];
  21. $plik_nazwa = $_FILES['plik']['name'];
  22. $plik_rozmiar = $_FILES['plik']['size'];
  23.  
  24.  
  25. if(is_uploaded_file($plik_tmp)) {
  26. move_uploaded_file($plik_tmp, "uploads/$id_user.$plik_nazwa");
  27. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze
  28. <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
  29. $ins1 = @mysql_query("UPDATE user SET logo='http://domena.pl/wizytowka/uploads/$id_user.$plik_nazwa' WHERE login='$id_user'");
  30. }
  31.  
  32. $ins = @mysql_query("UPDATE user SET kodp='$kodp', miejscowosc='$miejscowosc', ulica='$ulica', telefon='$telefon' WHERE login='$id_user'");
  33.  
  34. if($ins)
  35. echo 'Dane zostały zmienione poprawnie <meta http-equiv="refresh" content="1; URL=hideus.php">';
  36.  
  37. else echo "Błąd nie udało się zmienić danych";
  38.  
  39. mysql_close($connection);
  40. }
  41.  
  42. elseif ($_SESSION['auth'] == TRUE) {
  43.  
  44. echo 'Treść dostępna tylko dla administratora<br />';
  45. echo '<a href="index.php?logout">Wyloguj się</a>';
  46. }
  47.  
  48. else {
  49.  
  50.  
  51. echo '<meta http-equiv="refresh" content="1; URL=index.php">';
  52. echo '<p style="padding-top:10px;color:white";><strong>Próba nieautoryzowanego dostępu...</strong><br />trwa przenoszenie do formularza logowania</p>';
  53. }
  54.  
  55. ?>

Wiem, że w kodzie jest duży bałagan ale jestem początkującym i dużo rzeczy robiłem metodą prób i błędów także proszę o wyrozumiałość (IMG:style_emoticons/default/wink.gif) Wiem, też że funkcja mysql_query jest już na wymarciu ale jak na razie mi wystarczy (IMG:style_emoticons/default/smile.gif)

Jak proponujecie rozwiązać sprawę z rozmiarem zdjęcia? Czy da się przeskalować zdjęcie do maksymalnego rozmiaru 640x400?

Pozdrawiam,
Adrian
Go to the top of the page
+Quote Post
mariolita
post
Post #2





Grupa: Zarejestrowani
Postów: 116
Pomógł: 10
Dołączył: 24.04.2015

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


A uploadowane zdjęcia wszystkie będą w SKALI 640 na 400 ? bo jak będzie inne to będą rozciągnięte po zmianie (na wysokość albo szerokość). Więc przyadłoby się jeszcze przyciąć? No i jeszcze jedno, zdjęcia muszą mieć rozmiar 640px na 400 px minimum.
Go to the top of the page
+Quote Post
adiseq
post
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 20.11.2011

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


nie nie, nie chcę żeby wszystkie miały taką wielkość ale żeby to był największy rozmiar z możliwych jak np logo będzie 1000px x 1000 px to żeby przeskalowało tak żeby było 400x400, a np logo 1200x800 przeskalowało na 640x426 itd.
Kombinowałem coś z taką funkcją:
  1. function resize_image($file, $w, $h, $crop=FALSE) {
  2. list($width, $height) = getimagesize($file);
  3. $r = $width / $height;
  4. if ($crop) {
  5. if ($width > $height) {
  6. $width = ceil($width-($width*abs($r-$w/$h)));
  7. } else {
  8. $height = ceil($height-($height*abs($r-$w/$h)));
  9. }
  10. $newwidth = $w;
  11. $newheight = $h;
  12. } else {
  13. if ($w/$h > $r) {
  14. $newwidth = $h*$r;
  15. $newheight = $h;
  16. } else {
  17. $newheight = $w/$r;
  18. $newwidth = $w;
  19. }
  20. }
  21. $src = imagecreatefromjpeg($file);
  22. $dst = imagecreatetruecolor($newwidth, $newheight);
  23. imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  24.  
  25. return $dst;
  26. }

Wywołanie:
  1. $img = resize_image('/path/to/some/image.jpg', 200, 200);

Ale nie wiem jak i w którym momencie ją wywołać

Ten post edytował adiseq 11.08.2016, 12:52:54
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


Po move_uploaded_file kiedy masz już ten plik u siebie na serwerze. Twój kod jest mocno przestarzały. Używasz niewspieranych funkcji mysql do tego ukrywasz wszystkie błędy.
Go to the top of the page
+Quote Post
adiseq
post
Post #5





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 20.11.2011

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


Zdaje sobie sprawę z tego że kod jest przestarzały ponieważ opierałem go o różne poradniki (niektóre nawet z 2007 roku). Chodzi mi o bardzo prostą stronę ponieważ chce zobaczyć czy pomysł "zaskoczy" jak się uda to na pewno powierzę napisanie strony odpowiedniej osobie ale na razie nie chcę wydawać pieniędzy na coś co może nigdy nie powstać.
Dodałem wywołanie po move_uploaded_file niestety nic to nie dało.
  1. if(is_uploaded_file($plik_tmp)) {
  2. move_uploaded_file($plik_tmp, "uploads/$id_user.$plik_nazwa");
  3. $img = resize_image("uploads/$id_user.$plik_nazwa", 640, 400);

Mógłbyś podpowiedzieć co źle zrobiłem?

Pozdrawiam,
Adrian
Go to the top of the page
+Quote Post
kapslokk
post
Post #6





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


funkcja resize_image zwraca Ci obrazek, ale istnieje on tylko w pamieci. Musisz zapisac go na dysku.
Go to the top of the page
+Quote Post
adiseq
post
Post #7





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 20.11.2011

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


funkcją move_uploaded_file?
Go to the top of the page
+Quote Post
kapslokk
post
Post #8





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


http://php.net/manual/en/function.imagejpeg.php
I analogicznymi
Go to the top of the page
+Quote Post
adiseq
post
Post #9





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 20.11.2011

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


Dziękuję wszystkim, poradziłem sobie z zapisem (IMG:style_emoticons/default/smile.gif)
Mam tylko jeszcze problem, funkcja resize_image (niżej) działa na plikach jpg, natomiast jeżeli wgarm plik png to rozmiar zmienia ale cały obraz jest czarny (IMG:style_emoticons/default/sad.gif)
  1. function resize_image($file, $w, $h, $crop=FALSE) {
  2. list($width, $height) = getimagesize($file);
  3. $r = $width / $height;
  4. if ($crop) {
  5. if ($width > $height) {
  6. $width = ceil($width-($width*abs($r-$w/$h)));
  7. } else {
  8. $height = ceil($height-($height*abs($r-$w/$h)));
  9. }
  10. $newwidth = $w;
  11. $newheight = $h;
  12. } else {
  13. if ($w/$h > $r) {
  14. $newwidth = $h*$r;
  15. $newheight = $h;
  16. } else {
  17. $newheight = $w/$r;
  18. $newwidth = $w;
  19. }
  20. }
  21. $src = imagecreatefromjpeg($file);
  22. $dst = imagecreatetruecolor($newwidth, $newheight);
  23. imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  24.  
  25. return $dst;
  26. }

Problem chyba jest w tej linijce
  1. $src = imagecreatefromjpeg($file);

jakieś rady? czy ta funkcja będzie działać tylko z rozszerzeniem jpg?
Go to the top of the page
+Quote Post
trueblue
post
Post #10





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Ta funkcja nie działa z rozszerzenie jpg, lecz z formatem JPEG.
Wejdź do manuala i poszukaj w okolicy podobnych funkcji dla innych formatów.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 22:44