Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z generatorem obrazków
Forum PHP.pl > Forum > Przedszkole
Syriusz
Kod
[/code]Witam, swoja przygodę rozpocząłem z php około tygodnia temu, jednak chyba nieźle mi idzie, jednak napotkałem opór od strony kodu. Chciałem zrobić rozbudowany generator grafiki. i mam 2 pliki:
index.php:
[code]
<head>
<script type="text/javascript">
    window.onload = Laduj;
    var active_id = "";

    function Laduj()
    {
        document.forms['generator'].tlo.onchange = Zmien;
    }

    function Zmien()
    {
        if (active_id != "")
        {
            var blok2 = document.getElementById(active_id);
            blok2.style.display = "none";
        }
        var blok = document.getElementById(this.value);
        blok.style.display = "block";
        active_id = this.value;
    }
</script>

</head>
<body>
<center>
<table name="kreator" width="500" height="400" border="0">

<form name="generator" action="read.php"  method="post">
<tr>
<td>
Nick:<input type="text" name="nick" size="10" value="nick" /> <br>
Rozmiar czcionki: <select name="rozmiar">
        <option>8</option>
        <option>10</option>
        <option>12</option>
        <option>14</option>
        <option>16</option>
        <option>18</option>
        <option>20</option>
        <option>22</option>
        <option>24</option>
        <option>26</option>
        <option>28</option>
        <option>30</option>
        <option>32</option>
        <option>36</option>
        <option>40</option>
        <option>44</option>
        <option>48</option>
        <option>56</option>
        <option>62</option>
        <option>68</option>
        <option>74</option>
    </select><br>
Obróć tekst o: <select name="kat">
        <option>0</option>
        <option>5</option>
        <option>10</option>
        <option>15</option>
        <option>20</option>
        <option>25</option>
        <option>30</option>
        <option>35</option>
        <option>40</option>
        <option>45</option>
        <option>50</option>
        <option>55</option>
        <option>60</option>
        <option>65</option>
        <option>70</option>
        <option>75</option>
        <option>80</option>
        <option>85</option>
        <option>90</option>
        <option>-5</option>
        <option>-10</option>
        <option>-15</option>
        <option>-20</option>
        <option>-25</option>
        <option>-30</option>
        <option>-35</option>
        <option>-40</option>
        <option>-45</option>
        <option>-50</option>
        <option>-55</option>
        <option>-60</option>
        <option>-65</option>
        <option>-70</option>
        <option>-75</option>
        <option>-80</option>
        <option>-85</option>
        <option>-90</option>
    </select>stopni<br>
Położenie nicku:<br>odstęp od góry w pikselach: <input type="text" name="odstep2" size="5" maxlength="3" value="000" /><br>
odstęp od lewej w pikselach: <input type="text" name="odstep1" size="5" maxlength="3" value="000" />
<br>
Wybierz czcionkę: <select name="czcionka">
        <option>arial.ttf</option>
        <option>tahoma.ttf</option>
        <option>verdena.ttf</option>
        <option>base_02.ttf</option>
    </select>
</td></tr>
<tr><td>
Kolor czcionki: <select name="kolor">
        <option value="1" style="background: #FFFFFF; margin: 2px; color: #FFFFFF;" >bialy</option>
        <option value="13" style="background: #C0C0C0; margin: 2px; color: #C0C0C0;" >srebrny</option>
        <option value="6" style="background: #808080; margin: 2px; color: #808080;" >szary</option>
        <option value="12" style="background: #000000; margin: 2px; color: #000000;" >czarny</option>
        <option value="15" style="background: #000080; margin: 2px; color: #000080;" >granatowy</option>
        <option value="niebieski" style="background: #0000FF; margin: 2px; color: #0000FF;" >niebieski</option>
        <option value="17" style="background: #00FFFF; margin: 2px; color: #00FFFF;" >jasnoniebieski</option>
        <option value="7" style="background: #FF00FF; margin: 2px; color: #FF00FF;" >różowy</option>
        <option value="4" style="background: #800080; margin: 2px; color: #800080;" >fioletowy</option>
        <option value="bordowy" style="background: #800000; margin: 2px; color: #800000;" >bordowy</option>
        <option value="czerwony" style="background: #FF0000; margin: 2px; color: #FF0000;" >czerwony</option>
        <option value="pomarańczowy" style="background: #FFA500; margin: 2px; color: #FFA500;" >pomarańczowy</option>
        <option value="żółty" style="background: #FFFF00; margin: 2px; color: #FFFF00;" >żółty</option>
        <option value="limonka" style="background: #00FF00; margin: 2px; color: #00FF00;" >limonka</option>
        <option value="zielony" style="background: #008000; margin: 2px; color: #008000;" >zielony</option>
        <option value="14" style="background: #808000; margin: 2px; color: #808000;" >oliwkowy</option>
        <option value="16" style="background: url:bg1.png; margin: 2px; color: #008080;" >turkusowy</option>
        </select>
</td>
</tr>
<tr width="400">
<td>
Wybierz tło: <select name="tlo">
        <option value="bg1.png">bg1.png</option>
        <option value="bg2.png">bg2.png</option>
        <option value="bg3.png">bg3.png</option>
        </select>
</td>
<td width="200" height="100">
    <div id="bg1.png" style="display: none;"><img src="bg1.png" height="75" width="150"></div>
    <div id="bg2.png" style="display: none;"><img src="bg2.png" height="75" width="150"></div>
    <div id="bg3.png" style="display: none;"><img src="bg3.png" height="75" width="150"></div>
</td>
</tr>
<tr colspan="2"><td>
<INPUT TYPE="submit" VALUE="GENERUJ">
</FORM></td></tr></table>
</center>
</body>


oraz plik read.php:
Kod
<?php

$nick = ($_POST['nick']);
$czcionka = ($_POST['czcionka']);
$tlo = ($_POST['tlo']);
$size = ($_POST['rozmiar']);
$kat = ($_POST['kat']);
$x = ($_POST['odstep1']);
$z = ($_POST['odstep2']);
$kolor = ($_POST['kolor']);

if ($kolor == "niebieski") {
$a = "0";
$b = "0";
$c = "255";
}

if ($kolor == "czerwony") {
$a = "255";
$b = "0";
$c = "0";
}


$rysunek = ImageCreateFromPng($tlo);

$color = ImageColorAllocate($image, $a, $b, $c);

ImageTTFText($rysunek, $size, $kat, $x, $z, $color, $czcionka, $nick);

header("Content-type: image/jpeg");
ImageJpeg($rysunek);


Opis problemu:

Co bym nie robił zawsze tekst jest czarny, $a, $b, $c nie przyjmuje odpowiednich wartości próbowałem na różne sposoby, nawet klient sam wprowadzał w formularzu wartość red, green i blue w polach <input type="text"... i nic to nie dawało...

Prosze o pomoc to bardzo pilne!
Kshyhoo
Skoro <option value="1" to dlaczego if ($kolor == "niebieski") { ? Trzymaj się jakiegoś zapisu...
Skoro $rysunek = ImageCreateFromPng($tlo); to dlaczego header("Content-type: image/jpeg"); ImageJpeg($rysunek); ?
Skoro $rysunek = ImageCreateFromPng($tlo); to dlaczego $color = ImageColorAllocate($image, $a, $b, $c);
header("Content-type: image/png"); lepiej daj na początku, bo bedziesz miał problemy z wysyłaniem nagłówka.
Jak zakomentujesz header("Content-type: image/png");, to zobaczysz błędy...
Po imagepng($rysunek); daj imagedestroy($rysunek); żeby zwolnić pamięć.
Po za tym, wszystko inne działa.

Co do kolorów, to proponuję takie rozwiązanie (czytelniejsze):
  1. switch ($kolor) {
  2. case '1' : $a = "255"; $b = "255"; $c = "255"; break; // biały
  3. case '2' : $a = "0"; $b = "0"; $c = "255"; break; // niebieski
  4. case '3' : $a = "128"; $b = "0"; $c = "0"; break; // bordowy
  5. case '4' : $a = "128"; $b = "0"; $c = "128"; break; // fioletowy
  6. case '5' : $a = "255"; $b = "0"; $c = "0"; break; // czerwony
  7. case '6' : $a = "128"; $b = "128"; $c = "128"; break; // szary
  8. case '7' : $a = "255"; $b = "0"; $c = "255"; break; // różowy
  9. case '8' : $a = "255"; $b = "165"; $c = "0"; break; // pomarańczowy
  10. case '9' : $a = "255"; $b = "255"; $c = "0"; break; // żółty
  11. case '10' : $a = "0"; $b = "255"; $c = "0"; break; // limonka
  12. case '11' : $a = "0"; $b = "128"; $c = "0"; break; // zielony
  13. case '12' : $a = "0"; $b = "0"; $c = "0"; break; // czarny
  14. case '13' : $a = "192"; $b = "192"; $c = "192"; break; // srebrny
  15. case '14' : $a = "128"; $b = "128"; $c = "0"; break; // oliwkowy
  16. case '15' : $a = "0"; $b = "0"; $c = "128"; break; // granatowy
  17. case '16' : $a = "0"; $b = "128"; $c = "128"; break; // turkusowy
  18. case '17' : $a = "0"; $b = "255"; $c = "255"; break; // jasnoniebieski
  19. }

Do czcionki musi być podana ścieżka albo fonty w katalogu ze skryptem.

Popraw BBcode
Syriusz
wstydnis.gif Podstawowe błędy logiczne biggrin.gif jak PNg to nie JPG.

podczas pisania tego korzystałem z manuala do php i pewnie nawet nie zważyłem kiedy popełniłem te błędy...

Super z tym switch zaproponowałeś faktycznie if nie ma tutaj racji bytu jak mam pięknie id popisane.

Czy mógłbym prosić o usunięcie tego wątku? chodzi o to, że to praca kontrolna i nie chciałbym aby mój nauczyciel wylukał to w necie i potem mi zarzucił, że sam tego nie napisałem, tylko skopiowałem :/ a kosa z niego nieziemska.

Jeszcze raz bardzo dziękuję za pomoc i pewnie jeszcze tu wrócę w przyszłości z innymi problemami, mam nadzieję, że nie z takimi błahymi, tylko zadam Wam coś nad czym tez troche przysiądziecie tongue.gif pozdrawiam.
Kshyhoo
Chcesz wracać, to się zarejestruj. To nic nie kosztuje.
Co do usuwania wątków, nie robimy tego, bo się przyda to na przyszłość dla innych.
Twój nauczyciel nie powinien się czepiać, bo właśnie umiejętność wyszukiwania rozwiązań i poszukiwania pomocy jest normalnym procesem w czasie nauki - tym bardziej, że dysponowałeś własnym kodem.
Dla łatwiejszego zrozumienia problemów, korzystaj z wyświetlania danych przechodzących przez tablice globalne, takich jak:
var_dump()
var_export()
print_r()
Szczególnie takie cudo może być pomocne (dotyczy wszystkich danych):
  1. print('<pre>POST: ');
  2. print_r($_POST);
  3. print('</pre>');

A jak czegoś nie umiesz znaleźć, bo twierdzisz, że go nie ma ("nie przechodzi" - jak pisałeś), wyświetlaj zmienne:
  1. echo "Tu powinna być zmienna $kolor: ".$kolor;

Dotyczy to również zapytań...
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.