Autor | Zpráva | ||
---|---|---|---|
Fisak Profil |
#1 · Zasláno: 10. 5. 2013, 14:47:30
Dobrý den. Potřeboval bych vymyslet výpočet pro napozicování obrázku mapy v php. Mám $vel = "velikost_ctverce"
$vel = 112; for ($i = 0; $i <= 209; $i++) { $sirka = $vel * $i; $vyska_i = ceil($i / 19); $vyska = $vel * $vyska_i; $url = "./../../images/textures/".$_GET["p".$i].".jpg"; $image = imageCreateFromjpeg($url); imageCopyMerge($im, $image, $sirka, $vyska, 0, 0, $vel, $vel, 100); } Takhle mam v url 209 obrázků nadefinovanejch. Potřeboval bych u proměnných $vyska a $sirka vymyslet nějaký výpočet aby se mi ty čtvercové obrázky ředili vedle sebe tzn. po $vel = "112"; a po každém 19. čtverci by se udělal nový řádek ...takhle by bylo celkem 11 řádků protože 11 * 19 = 209 čtverců.. a dostal bych takto velký obrázek. Předem děkuji za odpovědi.. |
||
DJ Miky Profil |
#2 · Zasláno: 10. 5. 2013, 15:04:16
Když pominu předávání parametrů v URL a jejich neošetření... Je to celkem jednoduchá matematika. Pokud máš 19 dlaždic na řádek, spočítáš číslo řádku jako
floor($i / 19) a číslo sloupce jako $i % 19 (obojí indexováno od nuly).
Mimochodem, cyklus od 0 do 209 vyprodukuje 210 hodnot. A pro výrazné zvýšení výkonu bys neměl otevírat obrázky pořád dokola. Pokud si obrázky podle typů uložíš do pole, při 209 dlaždicích vody ti bude stačit jen jedno otevření souboru místo 209. |
||
Fisak Profil |
#3 · Zasláno: 10. 5. 2013, 15:14:25
DJ Miky:
„A pro výrazné zvýšení výkonu bys neměl otevírat obrázky pořád dokola. Pokud si obrázky podle typů uložíš do pole, při 209 dlaždicích vody ti bude stačit jen jedno otevření souboru místo 209.“ mohu se zeptat jak tohoto docílit ?? určitě by mi to hodně pomohlo :-) .. a já to nakonec vyřešil takto: $vel = 112; $p = 1; for ($a = 0; $a <= 980; $a+=$vel) { //výška for ($i = 0; $i <= 1920; $i+=$vel) { //šířka $p++; $p <= 209; $url = "./../../images/textures/".$_GET["p".$p].".jpg"; $image = imageCreateFromjpeg($url); imageCopyMerge($im, $image, $i, $a, 0, 0, $vel, $vel, 100); } } |
||
Joker Profil |
#4 · Zasláno: 10. 5. 2013, 15:26:00
Fisak:
Viz DJ Miky a ještě připomenu, že by bylo dobré vymyslet efektivnější způsob těch parametrů. Například Internet Explorer má limit délky GET části URL 2048 znaků a celé URL 2083 znaků. Jestli dobře počítám a maximální délka hodnoty je 4 znaky („voda“), samotná data mapy mohou zabrat až 1982 znaků. Čili na všechno ostatní už moc znaků nezbývá. Přitom jestli jsou jen dvě hodnoty („voda“ a „zem“), dalo by se napsat kódování, které by těch 209 políček uložilo do 35 znaků. |
||
Fisak Profil |
#5 · Zasláno: 10. 5. 2013, 15:29:52
Joker:
No bohužel to neni jen voda a zem .. mám zde textury které jse jmenují "trava_s_cestou" apod. |
||
tiso Profil |
#6 · Zasláno: 10. 5. 2013, 15:47:15
Fisak: je nejaký dôvod prečo v url predávaš všetky tie obrázky miesto súradnice stredu mapy alebo súradníc dvoch protiľahlých rokov mapy?
|
||
Fisak Profil |
#7 · Zasláno: 10. 5. 2013, 15:49:42
tiso:
ano protože je vše nadefinované v DB a bohužel když chci poskládat v php obrázek tak tam nemůžu používat sql.. |
||
Joker Profil |
#8 · Zasláno: 10. 5. 2013, 15:50:14
Fisak:
Tak tím spíš je potřeba vymyslet nějaké efektivní kódování, protože už 120 políček „trava_s_cestou“ by vyčerpalo celou délku GET části URL. |
||
Fisak Profil |
#9 · Zasláno: 10. 5. 2013, 15:52:31 · Upravil/a: Fisak
Joker:
Vymslím to ale nejprve bych rád udělal to aby když v getu bude např. deset krát "voda" tak aby se v $url = "./../../images/textures/".$_GET["p".$p].".jpg"; $image = imageCreateFromjpeg($url); šlo by to např. nějak pomocí http://php.net/manual/en/function.array-unique.php ?? |
||
Joker Profil |
#10 · Zasláno: 10. 5. 2013, 16:05:29
Fisak:
Na tom není potřeba nic až tak vymýšlet, ne? Pokud existuje pole["název"], použij jeho obsah jinak načti soubor, použij ho a ulož do pole["název"] |
||
Fisak Profil |
#11 · Zasláno: 10. 5. 2013, 16:08:35
Joker:
No moc nevím jak můžete mi prosím dát příklad nebo nějaký odkaz jak bych to měl udělat? a upravil jsem ten get.. teď vypadát takto /?p=n;voda;zem;voda;.....;zem a vypisuje se to takto: $vel = 112; $p = 1; $pieces_obr = explode(";", $_GET['p']); for ($a = 0; $a <= 980; $a+=$vel) { //výška for ($i = 0; $i <= 2575; $i+=$vel) { //šířka $p++; $p <= 209; $url = "./../../images/textures/".$pieces_obr[$p].".jpg"; $image = imageCreateFromjpeg($url); imageCopyMerge($im, $image, $i, $a, 0, 0, $vel, $vel, 100); } } |
||
Joker Profil |
#12 · Zasláno: 10. 5. 2013, 16:18:14
Fisak:
„můžete mi prosím dát příklad“ OK, tak v kódu výše se $image nahradí na $images[$pieces_obr[$p]] a řádek 17 se bude dělat jen pokud daná položka není ještě načtená: if(empty($images[$pieces_obr[$p]])) $images[$pieces_obr[$p]] = imageCreateFromjpeg($url); $images = array();
|
||
Fisak Profil |
#13 · Zasláno: 10. 5. 2013, 16:25:05
Joker:
bohužel toto nefunguje :-/ $vel = 112; $p = 1; $pieces_obr = explode(";", $_GET['p']); $images = array(); for ($a = 0; $a <= 1080; $a+=$vel) { //výška for ($i = 0; $i <= 1920; $i+=$vel) { //šířka $p++; $p <= 209; $url = "./../../images/textures/".$pieces_obr[$p].".jpg"; if(empty($images[$pieces_obr[$p]])) $images[$pieces_obr[$p]] = imageCreateFromjpeg($url); imageCopyMerge($im, $image, $i, $a, 0, 0, $vel, $vel, 100); } } |
||
tiso Profil |
#14 · Zasláno: 10. 5. 2013, 16:26:26
[#7] Fisak
1. nerozumiem prečo by si tam nemohol použiť sql 2. čo potom robíš s tým vygenerovaným obrázkom? Nestačí ti poskladať ho až v prehliadači z tých malých? |
||
Fisak Profil |
tiso:
1. prostě nejde použít sql ve skládání obrázku .. nevím proč to nejde ale nejde 2. nestačí. Chci si z toho udělat background... co třeba něco takového ( i když mi to bohužel nefunguje): $vel = 112; $p = 1; $pieces_obr = explode(";", $_GET['p']); for ($a = 0; $a <= 11; $a++) { //výška for ($i = 0; $i <= 19; $i++) { //šířka $p++; $p <= 209; $vyska = $vel * $a; $sirka = $vel * $i; $url = "./../../images/textures/".$pieces_obr[$p]."..jpg"; static $pieces_obr[$p] = false; if($pieces_obr[$p] === false) $images = imageCreateFromjpeg($url); imageCopyMerge($im, $images, $sirka, $vyska, 0, 0, $vel, $vel, 100); } } |
||
Joker Profil |
#16 · Zasláno: 10. 5. 2013, 19:10:08
|
||
1Pupik1989 Profil |
#17 · Zasláno: 10. 5. 2013, 19:22:01
Fisak:
„ano protože je vše nadefinované v DB a bohužel když chci poskládat v php obrázek tak tam nemůžu používat sql..“ V tom případě se ale nabízí otázka. Kde zjistíte ty typy polí, když z DB nejdou vyčíst? Hledal bych spíš chybu tam, než vymýšlet nesmyslné předávání parametrů. |
||
Fisak Profil |
Takhle to nefunguje..
<?php $im = imagecreatetruecolor(2352, 1456); //$im = imagecreatetruecolor(1500, 900); $white = imagecolorallocate($im, 255, 255, 255); imagefill($im, 0, 0, $white); //End Canvas $vel = 112; $p = 0; $pieces_obr = explode(";", $_GET['p']); $images = array(); for ($y = 1; $y <= 11; $y++) { //výška for ($x = 1; $x <= 19; $x++) { //šířka $p++;; $sirka = $vel * $x; $vyska = $vel * $y; //$images = imageCreateFromjpeg("./../../images/textures/".$pieces_obr[$p].".jpg"); if(empty($images[$pieces_obr[$p]])) $images[$pieces_obr[$p]] = imageCreateFromjpeg("./../../images/textures/".$pieces_obr[$p].".jpg"); imageCopyMerge($im, $images, $sirka, $vyska, 0, 0, $vel, $vel, 100); } } ////-----------------------------------------------/////////////////// Header ("Content-type: image/jpeg"); //This will create the image! Imagejpeg ($im); ImageDestroy($images); přitom když místo if(empty($images[$pieces_obr[$p]])) $images[$pieces_obr[$p]] = imageCreateFromjpeg("./../../images/textures/".$pieces_obr[$p].".jpg"); dám $images = imageCreateFromjpeg("./../../images/textures/".$pieces_obr[$p].".jpg"); tak to funguje bohužel pomalu jelikož se všechny obrázky načítaj dokola.. |
||
Joker Profil |
#19 · Zasláno: 10. 5. 2013, 20:09:53
Fisak:
Je špatně pořád to stejné, co jsem psal v [#16]. Doporučuji si nastudovat alespoň základy PHP, protože bych řekl, že prostě náhodně měníte kusy kódu za jiné kusy kódu bez nějakého povědomí o tom, co se tam vlastně děje. |
||
Fisak Profil |
#20 · Zasláno: 10. 5. 2013, 20:13:19
Joker:
no ani když odstraním to $p <= 209; tak to stejně nefunguje .. Bohužel už nevím kde by mohla být chyba :-/ |
||
Časová prodleva: 11 let
|
0