Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PNG -> PHP + javascript = kicha
Forum PHP.pl > Forum > PHP
marian8
Generuje dynamicznie obrazek PNG poprzez php, ktory sie wyswietla prawidlowo. Problem w tym, ze obrazek przemieszcza sie za pomoca javascript i za kazdym ruchem glupek czyta ponownie ten obrazek. Jak obrazek to "obrazek.png" jest OK, ale jak obrazek generuje "obrazek.php" to wlasnie dzieja sie takie cyrki.
Jedyne co mi do glowy przychodzi to ze poza header("Content-type: image/png") trzeba wyslac jeszcze jakis naglowek.
za wszelka pomoc z gory dziekuje
chfast
Hm.. nigdy się nie bawiłem obrazkami, ale czy nie można za pomocą skryptu php (np. png.php) stworzyć obrazek w innym pliku (np. obrazek.png) i dopiero potem wczytać przez javascript ten drugi??
marian8
Ma to byc mapa na ktora beda dynamicznie nanoszone punkty w zaleznosci czego szuka uzytkownik. Poniwewaz mapa zajmuje 100KB a takich obiektow na mapie bedzie ponad 100 wiec troche mi to sie za bardzo rozrasta. Poza tym ciezko pozniej dokonac jakies zmiany na mapie.
Jesli jest jakis sposob stworzenia takiego tymczasowego pliku to Twoj sposob bylby dobry, ale powstaje pytanie kiedy i co mialoby kasowac ten tymczasowy plik.
Dzieki za propozycje
spenalzo
Pamiętajm, że przy pomocy php możesz zapisać obrazek na dysk - a wiec zapisujeszz do pliku obrazek.png i ten obrazek czytasz. Jak chcesz zmienić obrazek.png na nowy, to wywołujesz skrypt.php - czy o to chodziło, bo wydaje mi sie, że nie zrozumiałem problemu..
marian8
no tak, ale co sie stanie gdy kilka osob bedzie chcialo zobaczyc mape w tym samym czasie, z innymi punktami wyszczegolnionymi?
spenalzo
Wywołujesz plik generujacy obrazki z pewnymi parametrami dla danego usera, po czym zapisujesz plik według danego wzoru - np. mapa-42-coś_unikalnego-coś_jeszcze.png - coś w tym stylu; te parametry, które przekazujesz do generowania obrazka umieszczasz w nazwie pliku,żeby łatwo było go znaleźć - to już zadanie dla Ciebie smile.gif
Potem okresowo (np. co 2 godziny czyścisz katalog ze starych plików).
scanner
Nazwę obrazka można nadać taka jak ID sesji.
marian8
spenalzo - tak wlasnie chyba zrobie i zastosuje pomysl scannera z ID sesji
dzieki za podpowiedzi
marian8
OK, zrobilem to tak:

[php:1:80f7dc009b]<?php
function usun_stare($dir) { //usuwa stare obrazki
$tab = scandir($dir); //scandir zwraca pliki z podanej sciezki
if ($tab) {
$i = count($tab)-1;
while ($i>=2) { // bo $tab[0]="." $tab[1]=".."
if (time()-fileatime($dir.'/'.$tab[$i]) > 180) { //Jesli plik jest starszy niz 3 minuty
unlink ($dir.'/'.$tab[$i]);
}
$i--;
}
}
}

function zrob_mape($x,$y) {
$im = imagecreatefrompng ('pic/mapa.png');
$insert = imagecreatefrompng("pic/strzalka.png");
$background_color = imagecolorallocate ($im, 255, 255, 255);
imagecolortransparent($insert,imagecolorexact($insert,255,0,255));

$insert_x = imagesx($insert);
$insert_y = imagesy($insert);

imagecopymerge($im,$insert,$x,$y,0,0,$insert_x,$insert_y,50);
$plik = 'tmp/'.time().session_id().'.png';
imagepng ($im,$plik);
ImageDestroy($im);
ImageDestroy($insert);
session_destroy();
return $plik;
}

function wypisz_polozenie() {
$this->usun_stare('tmp');
$plik = $this->zrob_mape(100,100);
echo '<table id="tabela" style="background: url(''.$plik.'');.........
?>[/php:1:80f7dc009b]

Na poczatku wszystkiego dalem session_start() i teraz mam pytanie - czy musze pozniej robic session_destroy(). Nigdy wczesniej nie bawilem sie sesjami wiec nie wiem...

Dzieki wszystkim za pomoc
Jesli cos w tym kodzie jest nie tak to dajcie znac
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.