Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem ze znakiem wodnym w php
Forum PHP.pl > Forum > PHP
Paul149
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 (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. header('Content-Type: image/jpeg');
  25. imagejpeg($image);
  26. imagedestroy($image);
  27. imagedestroy($watermark);
  28.  
  29. 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. }
SmokAnalog
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);
Paul149
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
viking
A masz taką ścieżkę /template/new/img/inf.png? Włącz wyświetlanie błędów.
SmokAnalog
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.
Paul149
możesz mi jakoś pomoc z tym kodem? byłbym wdzięczny
SmokAnalog
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. 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.
Paul149
  1. if($query)
  2. {
  3. 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 (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. 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. 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
SmokAnalog
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.
Paul149
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.
SmokAnalog
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?
Paul149
teraz wysyła wszystkie ale w żadnym nie generuje znaku wodnego.
SmokAnalog
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.
Paul149
bool(false) bool(false)

taki błąd mi pokazało
SmokAnalog
To nie jest błąd, tylko wartość czegoś, nawet nie wiem czego.
Paul149
Teraz działa, dzięki bardzo wszystko jestok, okazał się błąd w ścieżce do pliku gif
SmokAnalog
No widzisz, czasem trzeba sprawdzić wszystko smile.gif
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-2024 Invision Power Services, Inc.