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
foreach ($_FILES["plik"]["error"] as $key => $error)
{
if ($error == UPLOAD_ERR_OK) {
$addnews_query = $mysql->query("INSERT INTO `photos` (`id`, `Type`) VALUES ('$post_id', 'test')");
$img_insert_id = $mysql->insert_id;
$file_tmp = $_FILES["plik"]["tmp_name"][$key];
$file_name = $_FILES["plik"]["name"][$key];
//$file_up_name = time();
$true_hash = $img_insert_id;
//$file_hash = str_replace('=', '', base64_encode($true_hash));
{
$image = imagecreatefromjpeg($true_hash);
$watermark = imagecreatefromjpeg('/template/new/img/inf.png');
$width = imagesx($image);
$height = imagesy($image);
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
imagecopymerge($image, $watermark, (($width - $watermark_width))-10, (($height - $watermark_height))-10, 0, 0, $watermark_width, $watermark_height, 100);
header('Content-Type: image/jpeg'); imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);
$query = $mysql->query("UPDATE `photos` SET `Address` = '$file_hash' WHERE `id` = '$post_id'");
}
}
}
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);
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
viking
23.10.2020, 05:45:12
A masz taką ścieżkę /template/new/img/inf.png? Włącz wyświetlanie błędów.
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.
Paul149
23.10.2020, 22:26:24
możesz mi jakoś pomoc z tym kodem? byłbym wdzięczny
SmokAnalog
24.10.2020, 13:19:29
Musisz przede wszystkim odczytać obrazek i go zapisać, np.:
$image = imagecreatefromjpeg($file_tmp);
// ...
imagejpeg($image, '../uploads/photos/' . $img_insert_id . '.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
24.10.2020, 15:19:06
if($query)
{
echo '<center><div class="login_ok">Dodane!</div></center>'; foreach ($_FILES["plik"]["error"] as $key => $error)
{
if ($error == UPLOAD_ERR_OK) {
$addnews_query = $mysql->query("INSERT INTO `photos` (`cid`, `Type`) VALUES ('$post_id', 'annoncement')");
$img_insert_id = $mysql->insert_id;
$file_tmp = $_FILES["plik"]["tmp_name"][$key];
$file_name = $_FILES["plik"]["name"][$key];
//$file_up_name = time();
$obraz = $img_insert_id;
//$file_hash = str_replace('=', '', base64_encode($true_hash));
{
$image = imagecreatefromjpeg($file_tmp);
$watermark = imagecreatefromjpeg('text.gif');
$width = imagesx($image);
$height = imagesy($image);
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
imagecopymerge($image, $watermark, (($width - $watermark_width))-10, (($height - $watermark_height))-10, 0, 0, $watermark_width, $watermark_height, 100);
imagejpeg($image, '../uploads/photos/' . $img_insert_id . '.jpg');
$query = $mysql->query("UPDATE `photos` SET `Address` = '$file_hash' WHERE `id` = '$post_id'");
}
}
}
echo'<div class="linkok"><a href="/'.$admin.'/annoncement.php">Wróc na stronę</a></div>'; break;
}
aktualnie nie zapisuje ze znakiem wodnym na ftp
tyle ze z imagejpeg dodaje tylko jeden plik, a na stronie jest multipload
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.
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.
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?
Paul149
24.10.2020, 21:08:49
teraz wysyła wszystkie ale w żadnym nie generuje znaku wodnego.
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.
Paul149
24.10.2020, 21:14:14
bool(false) bool(false)
taki błąd mi pokazało
SmokAnalog
24.10.2020, 21:16:20
To nie jest błąd, tylko wartość czegoś, nawet nie wiem czego.
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
SmokAnalog
24.10.2020, 21:25:18
No widzisz, czasem trzeba sprawdzić wszystko
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.