Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Obrazek „http://localhost/1/zaliczenie.php” nie może zostać wyświetlony, ponieważ zawiera błędy.
Forum PHP.pl > Forum > Przedszkole
slawekp17
Witam,

Jak w temacie mam błąd:
Obrazek „http://localhost/1/zaliczenie.php” nie może zostać wyświetlony, ponieważ zawiera błędy.
przy pisaniu programu php, znak wodny z dwóch obrazków.
Jaki błąd/błędy mam w kodzie?

CODE
<?php
header("Content-type: image/jpeg");
$name1 = "Polska.jpg";
$name2 = "stopacta.jpg";
$im1 = imagecreatefromjpeg($name1);
$im2 = imagecreatefromjpeg($name2);
$dane = getimagesize($name2);
$sze = $dane[0]; $wys = $dane[1];
for ($y=0; $y<$wys; $y++) {
for ($x=0; $x<$sze; $x++) {
$rgb = imagecolorat($im2,$x,$y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$srednia = ($r+$g+$b)/3;

if ($srednia<100) {
$rgb = imagecolorat($im1,$x,$y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$r_nowe = $r + 40;
$g_nowe = $g + 40;
$b_nowe = $b + 40;
if ($r_nowe>255) $r_nowe=255;
if ($g_nowe>255) $g_nowe=255;
if ($b_nowe>255) $b_nowe=255;
$rgb_nowe = imagecolorallocate($im1, $r_nowe, $g_nowe, $b_nowe);
imagesetpixel($im1,$x,$y,$rgb_nowe);
};
};
};
imagejpeg($im1);
imagedestroy($im1);
?>


Pozdrawiam i proszę o szybką pomoc.

I jeszcze linki do obrazków które użyłem (mam je w tym samym folderze co pracę):
  1. http://www.fotoload.pl/index.php?id=7de9bfc3721456835ceb04855078726d130

  1. http://www.fotoload.pl/index.php?id=7de9bfc3721456835ceb04855078726d130
Lombi
U mnie działa to podręcznikowo.
Jesteś pewien że nazwy plików są dobre? Zmień w $name1 "P" na małą literę i upewnij się czy pliki są i mają identyczne nazwy.
slawekp17
Nazwy plików na pewno się zgadzają.
Plik zapisany jako Polska z wielkiej litery.

Tylko nie wiem czy dobrze wogole zapisuję plik.

Aha i mam komunikat jeszcze w Dreamweaver'e:
"Nie można wykryć plików dynamicznie powiązanych, ponieważ nie ma definicji serwisu dla tego dokumentu".


A mógłbyś kolego zapisać to w gotowym pliku i mi wysłać?
Lombi
Wrzuć zaliczenie.php i użyte jpg do jakiegoś zipa i daj link do pobrania.
slawekp17
  1. http://www38.zippyshare.com/v/54128611/file.html
Lombi
Mysiu pusiu smile.gif plik kodowany w UTF-8 z BOM dlatego header zwraca ci błąd. Przekonwertuj pliki php na UTF-8 bez BOM i będzie cacy.
Nie wiem jak to się nazywa w Dreamweaver'e, czy UTF-8 bez BOM czy jak w pajączkach itp UTF-8 bez czegoś tam (za cholere nie pamiętam jak to się mądrze nazywa w tych programach) na początku pliku.
slawekp17
yahoo.gif

Racja.
Odchaczylem tylko "Dołącz sygnaturę Unicode (BOM), jak poradziłeś i działa thumbsupsmileyanim.gif

Duuuuże dziękuję dla ciebie.


Mam tylko jeszcze jedną prośbę, pytanie:
Jak ustawić znak wodny na środku obrazka?
Lombi
Sprawdzasz rozmiary fotki i znaku wodnego. Odejmujesz od szerokości fotki szerokość znaku wodnego i dzielisz na dwa. W ten sposób masz parametr x dla znaku wodnego. Analogicznie robisz z wysokością.

Wyssane z palca żebyś zobaczył co i jak:

  1. list($large_width, $large_height) = getimagesize($large_path); // zdjątko
  2. list($wm_width, $wm_height) = getimagesize($wm_path); // znak wodny
  3. $wm_x_pos = (int)($large_width - $wm_width) / 2;
  4. $wm_y_pos = (int)($large_height - $wm_height) / 2;
  5. $icfj = imagecreatefromjpeg($large_path);
  6. $icfp = imagecreatefrompng($wm_path);
  7. imagecopy($icfj, $icfp, $wm_x_pos, $wm_y_pos, 0, 0, $wm_width, $wm_height);
  8. imagejpeg($icfj, $large_path, 100);
  9. imagedestroy($icfj);
  10. imagedestroy($icfp);
slawekp17
//Nie wiem jak Ci dziękować.

//Ale na prawdę ogromne dziękuję.


Jeszcze jedna prośba, bo z kolorami mam problem. Chcę żeby te z obrazka 2 (znaku wodnego) były zachowane a po wklejeniu zdjęć na siebie znak wodny był tylko lekko przezroczysty.
I jaką funkcją zacząć kod który wcześniej mi wysłałeś?

Przepraszam za tak dużo pytań, ale dopiero zaczynam się uczyć php'a.
Lombi
Co do intensywności znaku wodnego to np imagecopymerge ma możliwość ustawiania w procentach krycia. Mozna nią zastąpić imagecopy. Więcej info w manualu.

Nie rozumiem o co chodzi w pytaniu:
Cytat
I jaką funkcją zacząć kod który wcześniej mi wysłałeś?
slawekp17
Dokładnie chodzi mi w tym pytaniu w którym miejscu wstawić kod?
I czy tylko to co mi wysłałeś, czy też muszę jeszcze coś zmienić / dodać? worriedsmiley.gif

Przepraszam na prawdę jeszcze raz, ale programowanie to nie mój konik, a niestety jestem zmuszony to zrobić. co_jest.gif

Pomoże ktoś?
Chcę aby te zdjęcia były na siebie nałożone ale z lekką przezroczystością tego drugiego i zachowaniem kolorów.
Jeszcze raz zamieszczam paczkę z plikami:

  1. http://www43.zippyshare.com/v/21733419/file.html
Lombi
Jeśli nie musisz mieć obowiązkowo znaku wodnego w jpg to ja bym użył pliku png bez tła.
A wtedy nie musisz bawić się obróbką kolorów i można to zrobić tak:

  1. header("Content-type: image/jpeg");
  2. $image='Polska.jpg';
  3. $watermark='flaga.jpg'; // tu zmieniasz plik na png
  4. list($img_width,$img_height)=getimagesize($image);
  5. list($wm_width,$wm_height)=getimagesize($watermark);
  6. $wm_x_pos=(int)($img_width-$wm_width)/2;
  7. $wm_y_pos=(int)($img_height-$wm_height)/2;
  8. $img=imagecreatefromjpeg($image);
  9. $wm=imagecreatefromjpeg($watermark); // tu zmieniasz funkcję imagecreatefromjpeg na imagecreatefrompng
  10. imagecopymerge($img,$wm,$wm_x_pos,$wm_y_pos,0,0,$wm_width,$wm_height,50); // ostatni parametr to alpha !!!
  11. imagejpeg($img,null,100);
  12. imagedestroy($img);
  13. imagedestroy($wm);


To powinno wystarczyć. MANUAL motyla noga exclamation.gif smile.gif
slawekp17
W poleceniu nie ma wymaganych rozszerzeń zdjęć, więc jeśli zmienię chyba nic się nie stanie.
Ogromne kolejne dziękuję dla Ciebie kolego.
Pozdrawiam.

A zmieniając na png muszę jeszcze zmienić:
header("Content-type: image/jpeg, image/png");
..racja?
Lombi
Co według Ciebie to ma na celu?
  1. header("Content-type: image/jpeg");

To określa typ obrazka jaki zwraca skrypt prawda?
Wiec jeśli chcesz mieć rezultat jako jpg to zostaw jak jest w innym przypadku zmień na rządany.
slawekp17
Aha ok.
Zostawiłem, ale niestety dalej teraz błąd w kodzie wyświetla przy odtwarzaniu pliku.
Oczywiście zapisane jest dobrze, chyba.
Dodałem na początku i na końcu <?php, ?> i nic.
Lombi
Jej!! Jak piszesz że wyświetla jakiś błąd to ja mogę Ci tylko odpowiedzieć że nie wiem jak jakąś usterkę naprawić
slawekp17
To może zapytam ta czy do tego kodu ostatniego (twojego) muszę coś dopisać dokleić z tego pierwszego mojego?
Czy kod który wysłałeś to już rozwiązanie tematu?

A błąd teraz który wyświetla to jak w treści tematu.
Lombi
To skrypt samowystarczalny smile.gif Pokaż jak to finalnie wygląda u Ciebie.
slawekp17
CODE
<?php

header("Content-type: image/jpeg");
$image='Polska.jpg';
$watermark='flaga-polska.png';

list($img_width,$img_height)=getimagesize($image);
list($wm_width,$wm_height)=getimagesize($watermark);

$wm_x_pos=(int)($img_width-$wm_width)/2;
$wm_y_pos=(int)($img_height-$wm_height)/2;
$img=imagecreatefromjpeg($image);
$wm=imagecreatefrompng($watermark);

imagecopymerge($img,$wm,$wm_x_pos,$wm_y_pos,0,0,$wm_width,$wm_height,50);
imagejpeg($img,null,100);
imagedestroy($img);
imagedestroy($wm);

?>
Lombi
Aż sprawdziłem. Kod z Twojego ostatniego postu zapisałem i działa. Może znowu masz gdzieś kodowane z BOM. Posprawdzaj to dokładnie.

Natomiast jak już zacząłem to sprawdzać to jest mały problem w tym co zamierzasz osiągnąć.
Funkcja imagecopymerge w odróżnieniu od imagecopy ma parametr alphy, ale lekceważy to że png nie miało tła i dodaje sama czarne (człowiek uczy się przez całe życie smile.gif).
Tak więc albo używasz imagecopymerge i masz możliwość ustawienia krycia znaku wognego, albo imagecopy i masz png bez tła jako znak wodny. Można też dodać do znaku wodnego załóżmy w png czarne tło i w sktypcie ustawić aby rgb 0,0,0 było jako kolor transparent. Dodajesz przed imagecopymerge
  1. $tc=imagecolorallocate($wm,0,0,0);
  2. imagecolortransparent($wm,$tc);

i masz znak wodny o jakimś bardziej zaawansowanym kształcie niż kwadrat, bez tła z kryciem, w przypadku kodu który podałem dziś o 14:14, 50%.

Można się bawić dalej w zależności od tego co jest priorytetem zadania. Ale nie wiem czy to nie przerost formy nad treścią.
slawekp17
Wow hi.
Czyli jak ostatecznie będzie wyglądał kod?
A bom w tym kodzie przesłanym przez Ciebie miałem wyłączone ale i tak pokazywało błąd.
Jeśli możesz wstaw gotowy skrypt / albo lepiej plik, sprawdzę czy da się u mnie otworzyć.
Lombi
link do plików
slawekp17
Dziwne, spakowane od Ciebie działa.
THX za wszystko.

Pozdrawiam.
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-2025 Invision Power Services, Inc.