Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ Problem ze znakiem wodnym w php

Napisany przez: Paul149 22.10.2020, 21:25:40

Witam jak w temacie, czy ktoś mógłby mi pomóc z kodem w php? nie dodaje znaku wodnego i nie zapisuje się na ftp, bez kodu ze znakiem wodnym wszystko działa prawidłowo

  1. foreach ($_FILES["plik"]["error"] as $key => $error)
  2. {
  3. if ($error == UPLOAD_ERR_OK) {
  4. $addnews_query = $mysql->query("INSERT INTO `photos` (`id`, `Type`) VALUES ('$post_id', 'test')");
  5. $img_insert_id = $mysql->insert_id;
  6.  
  7. $file_tmp = $_FILES["plik"]["tmp_name"][$key];
  8. $file_name = $_FILES["plik"]["name"][$key];
  9. //$file_up_name = time();
  10.  
  11. $true_hash = $img_insert_id;
  12.  
  13. //$file_hash = str_replace('=', '', base64_encode($true_hash));
  14. if (http://www.php.net/is_uploaded_file($file_tmp))
  15. {
  16. $image = imagecreatefromjpeg($true_hash);
  17. $watermark = imagecreatefromjpeg('/template/new/img/inf.png');
  18. $width = imagesx($image);
  19. $height = imagesy($image);
  20. $watermark_width = imagesx($watermark);
  21. $watermark_height = imagesy($watermark);
  22. imagecopymerge($image, $watermark, (($width - $watermark_width))-10, (($height - $watermark_height))-10, 0, 0, $watermark_width, $watermark_height, 100);
  23.  
  24. http://www.php.net/header('Content-Type: image/jpeg');
  25. imagejpeg($image);
  26. imagedestroy($image);
  27. imagedestroy($watermark);
  28.  
  29. http://www.php.net/move_uploaded_file($file_tmp, '../uploads/photos/' .$image. '.jpg');
  30. $query = $mysql->query("UPDATE `photos` SET `Address` = '$file_hash' WHERE `id` = '$post_id'");
  31. }
  32. }
  33. }

Napisany przez: SmokAnalog 22.10.2020, 23:46:25

Chcesz wyświetlać te obrazki? Nie wczytywałem się aż tak w ten kod, ale spróbuj zamienić $true_hash = $img_insert_id; na $true_hash = file_get_contents($file_tmp);

Napisany przez: Paul149 23.10.2020, 01:12:49

Chciałem żeby na ftp mi się zapisywały zdjęcie ze znakiem wodnym z nazwa -> id zdjęcia mysql, bez znaku wodnego działa mi to znakomicie, ale ze znakiem wodnym już nie zapisuje na ftp

Napisany przez: viking 23.10.2020, 05:45:12

A masz taką ścieżkę /template/new/img/inf.png? Włącz wyświetlanie błędów.

Napisany przez: SmokAnalog 23.10.2020, 10:46:13

Spojrzałem drugim okiem i jest pełno baboli.

Przejrzyj sobie tutoriale albo dokumentację PHP GD. $image to zasób obrazka, a nie jakiś tekst. A żeby zapisać obrazek, musisz podać drugi parametr ze ścieżką pliku. Twój kod próbuje tylko wyświetlić ten obrazek. Content-Type jest niepotrzebny do zapisywania.

Napisany przez: Paul149 23.10.2020, 22:26:24

możesz mi jakoś pomoc z tym kodem? byłbym wdzięczny

Napisany przez: SmokAnalog 24.10.2020, 13:19:29

Musisz przede wszystkim odczytać obrazek i go zapisać, np.:

  1. $image = imagecreatefromjpeg($file_tmp);
  2.  
  3. // ...
  4.  
  5. imagejpeg($image, '../uploads/photos/' . $img_insert_id . '.jpg');
  6.  
  7. http://www.php.net/move_uploaded_file($file_tmp, '../uploads/photos/' . $img_insert_id . '-original.jpg');


Trochę tutaj własnych założeń zastosowałem. Zapisałem obrazek jako po prostu np. 3.jpg (ze znakiem wodnym) i 3-original.jpg bez znaku wodnego. Nie wiem czy chcesz też zapisywać obrazki bez znaku wodnego, czy nie. Dostosuj to pod siebie. I tak jak mówiłem, header() do ustawiania Content-Type jest zbędny.

Napisany przez: Paul149 24.10.2020, 15:19:06

  1. if($query)
  2. {
  3. http://www.php.net/echo '<center><div class="login_ok">Dodane!</div></center>';
  4. foreach ($_FILES["plik"]["error"] as $key => $error)
  5. {
  6. if ($error == UPLOAD_ERR_OK) {
  7. $addnews_query = $mysql->query("INSERT INTO `photos` (`cid`, `Type`) VALUES ('$post_id', 'annoncement')");
  8. $img_insert_id = $mysql->insert_id;
  9.  
  10. $file_tmp = $_FILES["plik"]["tmp_name"][$key];
  11. $file_name = $_FILES["plik"]["name"][$key];
  12. //$file_up_name = time();
  13.  
  14. $obraz = $img_insert_id;
  15.  
  16. //$file_hash = str_replace('=', '', base64_encode($true_hash));
  17. if (http://www.php.net/is_uploaded_file($file_tmp))
  18. {
  19. $image = imagecreatefromjpeg($file_tmp);
  20. $watermark = imagecreatefromjpeg('text.gif');
  21. $width = imagesx($image);
  22. $height = imagesy($image);
  23. $watermark_width = imagesx($watermark);
  24. $watermark_height = imagesy($watermark);
  25. imagecopymerge($image, $watermark, (($width - $watermark_width))-10, (($height - $watermark_height))-10, 0, 0, $watermark_width, $watermark_height, 100);
  26.  
  27. imagejpeg($image, '../uploads/photos/' . $img_insert_id . '.jpg');
  28.  
  29. http://www.php.net/move_uploaded_file($file_tmp, '../uploads/photos/' .$img_insert_id. '-test.jpg');
  30. $query = $mysql->query("UPDATE `photos` SET `Address` = '$file_hash' WHERE `id` = '$post_id'");
  31. }
  32. }
  33. }
  34. http://www.php.net/echo'<div class="linkok"><a href="/'.$admin.'/annoncement.php">Wróc na stronę</a></div>';
  35. break;
  36. }



aktualnie nie zapisuje ze znakiem wodnym na ftp
tyle ze z imagejpeg dodaje tylko jeden plik, a na stronie jest multipload

Napisany przez: SmokAnalog 24.10.2020, 18:33:19

Pobawiłem się chwilę Twoim kodem i do poprawy jest to:

1. Używasz znaku wodnego w formacie GIF, więc powinno być imagecreatefromgif() zamiast imagecreatefromjpeg().
2. Czy ten break na końcu nie jest błędem? Nie ma tu na zewnątrz żadnej pętli, chyba że pokazałeś tylko wycinek.

Udało mi się doprowadzić ten kod do stanu używalności, tzn. zapisał mi każdy obrazek w wersji zwykłej i ze znakiem wodnym text.gif w prawym dolnym rogu.

Napisany przez: Paul149 24.10.2020, 20:53:55

ten break jest zrobiony tak że jak wykona się skrypt to nie pojawia się formularz tylko link
ja próbowałem na lewo i prawo i nie udaje mi się

Po za tym jak wspomniałem przy jednym zdjęciu zapisuje na ftp tyle że bez znaku wodnego
a przy większej ilości zdjęć to zapisuje tylko jedne zdjęcie.

Napisany przez: SmokAnalog 24.10.2020, 21:06:03

Włącz sobie wyświetlanie błędów przede wszystkim i zobacz jakie są błędy.

Czyli jak wysyłasz np. dwa obrazki, to które dokładniej są prawidłowo generowane? Dostajesz tylko pierwszy obrazek bez znaku wodnego?

Napisany przez: Paul149 24.10.2020, 21:08:49

teraz wysyła wszystkie ale w żadnym nie generuje znaku wodnego.

Napisany przez: SmokAnalog 24.10.2020, 21:12:17

A zmieniłeś na imagecreatefromgif() i jesteś pewien, że ten obrazek ze znakiem wodnym ma prawidłową ścieżkę? Sam kod nakładania znaku wodnego jest w porządku, sprawdziłem.

Napisany przez: Paul149 24.10.2020, 21:14:14

bool(false) bool(false)

taki błąd mi pokazało

Napisany przez: SmokAnalog 24.10.2020, 21:16:20

To nie jest błąd, tylko wartość czegoś, nawet nie wiem czego.

Napisany przez: Paul149 24.10.2020, 21:19:23

Teraz działa, dzięki bardzo wszystko jestok, okazał się błąd w ścieżce do pliku gif

Napisany przez: SmokAnalog 24.10.2020, 21:25:18

No widzisz, czasem trzeba sprawdzić wszystko smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)