Ahoj, chtěl bych se zeptat jestli by mi někdo mohl sestavit kod, který vyvolal to, že se dá na webovou stránku nakreslit "obrázek" (jako v malovaní) a pak se uloží na web... Byl bych Vám moc vděčný.
Fórum › PHP
Kreslení přímo do webu...
Nedávno jsem něco takového dělal (není to stále hotové -> obzvlášť velké nedostatky to má v 3D módu, ten ty ale předpokládám nepotřebuješ)
<?
/*****************************************************************************************************
*
* Ondřej Šplíchal
* zelenacek@gmail.com
*
*****************************************************************************************************/
define("m2D", 1);
define("m3D", 2);
define("stripes-x", 101);
define("stripes-y", 102);
define("POINT", 201);
define("LINE", 202);
define("TRIANGLE", 203);
define("QUAD", 204);
define("BORDER", 11);
define("FILL", 12);
define("PERSPECTIVE", 21);
define("ORTOGRAPHIC", 22);
$BLACK = array(0,0,0);
$WHITE = array(255,255,255);
$RED = array(255,0,0);
$GREEN = array(0,255,0);
$BLUE = array(0,0,255);
$rtod = 180/pi();
$dtor = pi()/180;
class Image
{
var $mode = 0;
var $done = true;
var $width; // šířka obrázku
var $height; // výška obrázku
var $size; // velikost souboru
var $bpp; // barevná hloubka
var $comp; // komprese
// Content-type
var $BMP_type = "image/bmp";
var $img; // virtuální obrázek
var $image; // 2D data
var $image3d; // 3D data
var $used3d = 0;
var $project;
// 3D
var $show = 0; // způsob vykreslování
var $object = 0; // vykreslovaný objekt
var $vertex; // vrcholy
var $used_vert = 0; // použito
var $trans_x = 0.0; // posun scény
var $trans_y = 0.0;
var $trans_z = 0.0;
var $rot_x = 0.0; // rotace scény
var $rot_y = 0.0;
var $rot_z = 0.0;
// barvy
var $fcol_r = 0;
var $fcol_g = 0;
var $fcol_b = 0;
var $bcol_r = 255;
var $bcol_g = 255;
var $bcol_b = 255;
var $bgcol_r = 255;
var $bgcol_g = 255;
var $bgcol_b = 255;
/**************************************************/
function Image($lwidth, $lheight, $lmode=m2D, $limit=60){ // vytvoří obrázek
if($lwidth < 1 || $lheight < 1){
$this->done = false;
return;
}
if($lmode != m2D && $lmode != m3D){
$this->done = false;
return;
}
$this->mode = $lmode;
$this->width = $lwidth;
$this->height = $lheight;
$this->show = BORDER;
@set_time_limit($limit);
$this->project = PERSPECTIVE;
$this->done = true;
}
function ShowBMPImage(){ // zobrazí obrázek BMP
$this->PackBMPImage();
Header("Content-type: ". $this->BMP_type);
echo($this->img);
}
function GetBMPImage(){ // vrátí obrázek BMP
$this->PackBMPImage();
return $this->img;
}
function SaveBMPImage($filename){ // uloží obrázek BMP
$this->PackBMPImage();
return $this->SaveImg($filename);
}
function PackBMPImage(){ // vytvoří BMP
$this->bpp = 32;
$this->comp = 0;
$this->size = $this->header_size + ( ( $this->width * $this->height ) * ( $this->bpp / 8 ) );
$this->img = "BM"; // id souboru
$this->img .= $this->LE($this->size, 4); // velikost
$this->img .= $this->LE(0, 2);
$this->img .= $this->LE(0, 2);
$this->img .= $this->LE(54, 4); // offset
$this->img .= $this->LE(40, 4); // velikost hlavičky
$this->img .= $this->LE($this->width, 4); // šířka
$this->img .= $this->LE($this->height, 4); // výška
$this->img .= $this->LE(1, 2);
$this->img .= $this->LE($this->bpp, 2); // barevná hloubka
$this->img .= $this->LE($this->comp, 4);
$this->img .= $this->LE(0, 4);
$this->img .= $this->LE(0, 4);
$this->img .= $this->LE(0, 4);
$this->img .= $this->LE(0, 4);
$this->img .= $this->LE(0, 4);
if($this->mode == m3D){
$this->Convert3D();
}
for($fy=0; $fy < $this->height; $fy++){
for($fx=0; $fx < $this->width; $fx++){
if($this->image[($this->width*$fy)+$fx] != NULL){
$lpx_p = explode("_", $this->image[($this->width*$fy)+$fx]);
$lpx = $this->LE($lpx_p[2]);
$lpx .= $this->LE($lpx_p[1]);
$lpx .= $this->LE($lpx_p[0]);
$lpx .= $this->LE(0);
} else{
$lpx = $this->LE($this->bgcol_b);
$lpx .= $this->LE($this->bgcol_g);
$lpx .= $this->LE($this->bgcol_r);
$lpx .= $this->LE(0);
}
$this->img .= $lpx;
}
}
}
function ResizeImage($cwidth, $cheight, $crop=false){ // změna velikosti
$r_img = $this->image;
if($crop == true){
for($fy=0; $fy < $this->height; $fy++){
for($fx=0; $fx < $this->width; $fx++){
$lrade[$fx] = $r_img[($this->width*$fy)+$fx];
}
for($fx=0; $fx < $cwidth; $fx++){
$this->image[($cwidth*$fy)+$fx] = $lrade[$fx];
}
}
} else{
$lpri = $this->width / $cwidth;
for($fn=0; $fn < round( ($cheight * $this->width) / $lpri ); $fn++){
$this->image[$fn] = $r_img[$fn*$lpri];
}
}
$this->width = $cwidth;
$this->height = $cheight;
}
function Convert3D(){ // 3D -> 2D
$lu = 0;
while($lu < $this->used3d){
$lpol = explode("_", $this->image3d[$lu]);
switch($lpol[6]){
case POINT:
$lsou = $this->get3D($lpol[0], $lpol[1], $lpol[2]);
$this->image[($this->width*$lsou[1])+$lsou[0]] = $lpol[3] ."_". $lpol[4] ."_". $lpol[5];
$lu ++;
break;
case LINE:
$lm_fg = array($this->fcol_r, $this->fcol_g, $this->fcol_b);
$this->ColorFG(array($lpol[3], $lpol[4], $lpol[5]));
$lnpol = $this->get3Dver($lu, 2);
$lnver1 = explode("_", $this->image3d[$lnpol[1]]);
$lnver2 = explode("_", $this->image3d[$lnpol[2]]);
$lsou1 = $this->get3D($lnver1[0], $lnver1[1], $lnver1[2]);
$lsou2 = $this->get3D($lnver2[0], $lnver2[1], $lnver2[2]);
$this->line($lsou1[0], $lsou1[1], $lsou2[0], $lsou2[1]);
$this->ColorFG($lm_fg);
$lu += 2;
break;
case TRIANGLE:
$lm_fg = array($this->fcol_r, $this->fcol_g, $this->fcol_b);
$this->ColorFG(array($lpol[3], $lpol[4], $lpol[5]));
$lnpol = $this->get3Dver($lu, 3);
$lnver1 = explode("_", $this->image3d[$lnpol[1]]);
$lnver2 = explode("_", $this->image3d[$lnpol[2]]);
$lnver3 = explode("_", $this->image3d[$lnpol[3]]);
$lsou1 = $this->get3D($lnver1[0], $lnver1[1], $lnver1[2]);
$lsou2 = $this->get3D($lnver2[0], $lnver2[1], $lnver2[2]);
$lsou3 = $this->get3D($lnver3[0], $lnver3[1], $lnver3[2]);
$this->line($lsou1[0], $lsou1[1], $lsou2[0], $lsou2[1]);
$this->line($lsou2[0], $lsou2[1], $lsou3[0], $lsou3[1]);
$this->line($lsou3[0], $lsou3[1], $lsou1[0], $lsou1[1]);
$this->ColorFG($lm_fg);
if($lpol[7] == FILL){
}
$lu += 3;
break;
case QUAD:
$lm_fg = array($this->fcol_r, $this->fcol_g, $this->fcol_b);
$this->ColorFG(array($lpol[3], $lpol[4], $lpol[5]));
$lnpol = $this->get3Dver($lu, 4);
$lnver1 = explode("_", $this->image3d[$lnpol[1]]);
$lnver2 = explode("_", $this->image3d[$lnpol[2]]);
$lnver3 = explode("_", $this->image3d[$lnpol[3]]);
$lnver4 = explode("_", $this->image3d[$lnpol[4]]);
$lsou1 = $this->get3D($lnver1[0], $lnver1[1], $lnver1[2]);
$lsou2 = $this->get3D($lnver2[0], $lnver2[1], $lnver2[2]);
$lsou3 = $this->get3D($lnver3[0], $lnver3[1], $lnver3[2]);
$lsou4 = $this->get3D($lnver4[0], $lnver4[1], $lnver4[2]);
$this->line($lsou1[0], $lsou1[1], $lsou2[0], $lsou2[1]);
$this->line($lsou2[0], $lsou2[1], $lsou3[0], $lsou3[1]);
$this->line($lsou3[0], $lsou3[1], $lsou4[0], $lsou4[1]);
$this->line($lsou4[0], $lsou4[1], $lsou1[0], $lsou1[1]);
$this->ColorFG($lm_fg);
if($lpol[7] == FILL){
}
$lu += 4;
break;
default:
$lu ++;
}
}
}
function get3D($lx, $ly, $lz){ // perspektiva
global $dtor, $rtod;
// coord[0] = X
// coord[1] = Y
$coord[0] = $lx;
$coord[1] = $ly;
$jednotka = 2;
if($this->width < $this->height){ // jednotky
$dil = $this->width/$jednotka;
} else{
$dil = $this->height/$jednotka;
}
if($this->project == ORTOGRAPHIC){
$prev_z = -$lz/2;
$prev_x = cos(45*$dtor) * $prev_z;
$prev_y = sin(45*$dtor) * $prev_z;
$coord[0] = ($coord[0] * $dil) + ($this->width/2) + ($prev_x * $dil);
$coord[1] = ($coord[1] * $dil) + ($this->height/2) + ($prev_y * $dil);
} else{
$coord[0] = ($coord[0] * $dil) + ($this->width/2);
$coord[1] = ($coord[1] * $dil) + ($this->height/2);
}
$coord[0] = round($coord[0]);
$coord[1] = round($coord[1]);
return $coord;
}
function get3Dver($lod, $lnum = 1){
$lpol = explode("_", $this->image3d[$lod]);
$ltyp = $lpol[6];
if($lnum == -1){
$ltyp = $lpol[6];
for($lused=0; $ltype == $lpol[6]; $lused++){
$lret[$lused+1] = $lod+$lused;
$lpol = explode("_", $this->image3d[$lod+$lused+1]);
}
} else if($lnum > 0){
for($lused=0; $lused < $lnum; $lused++){
$lret[$lused+1] = $lod+$lused;
$lpol = explode("_", $this->image3d[$lod+$lused+1]);
}
}
$lret[0] = $lused + 1;
return $lret;
}
function LE($int, $le=1){ // převod
$rt = "";
while($int > 0){
$rt = $rt.chr($int & 255);
$int >>= 8;
}
return str_pad($rt, $le, "\x00", STR_PAD_RIGHT);
}
function SaveImg($filename){ // uloží obrázek
@$file = fopen($filename, "wb");
if(!$file){
return false;
}
fwrite($file, $this->img);
fclose($file);
return true;
}
function is_color($lcol){ // je to barva
if($lcol[0] > 255 || $lcol[1] > 255 || $lcol[2] > 255 || $lcol[0] < 0 || $lcol[1] < 0 || $lcol[2] < 0){
return false;
}
return true;
}
function is_px($lx, $ly){ // vejdeme se do obrázku
if($lx >= $this->width || $lx < 0 || $ly >= $this->height || $ly < 0){
return false;
}
return true;
}
function pixel($lx, $ly){ // nakreslí pixel
if($this->is_px($lx, $ly) == false){
return false;
}
$this->image[($this->width*$ly)+$lx] = $this->fcol_r ."_". $this->fcol_g ."_". $this->fcol_b;
return true;
}
function line($sx, $sy, $ex, $ey){ // kreslí úsečku
$lwidth = abs($sx - $ex);
$lheight = abs($sy - $ey);
if($lwidth > $lheight){
$del = $lwidth;
} else{
$del = $lheight;
}
if($del == 0){
return false;
}
if($sx > $ex){
$lwidth *= -1;
}
if($sy > $ey){
$lheight *= -1;
}
for($q=0; $q <= $del; $q++){
$ax = round($sx+($q*($lwidth/$del)));
$ay = round($sy+($q*($lheight/$del)));
$this->pixel($ax, $ay);
}
return true;
}
function point($lx, $ly, $lz=0.0){ // nakreslí bod
$this->image3d[$this->used3d] = $lx ."_". $ly ."_". $lz ."_". $this->fcol_r ."_". $this->fcol_g ."_". $this->fcol_b ."_". $this->object ."_". $this->show;
$this->used3d ++;
return true;
}
/*** barvy ***/
function SwapColor(){ // prohodí barvy
if($this->object != 0){
return false;
}
$fr = $this->fcol_r;
$fg = $this->fcol_g;
$fb = $this->fcol_b;
$this->fcol_r = $this->bcol_r;
$this->fcol_g = $this->bcol_g;
$this->fcol_b = $this->bcol_b;
$this->bcol_r = $fr;
$this->bcol_g = $fg;
$this->bcol_b = $fb;
return true;
}
function ColorBG($lcol){ // nastaví barvu výplně
if($this->is_color($lcol) == false){
return false;
}
if($this->object != 0){
return false;
}
$this->bcol_r = $lcol[0];
$this->bcol_g = $lcol[1];
$this->bcol_b = $lcol[2];
return true;
}
function ColorFG($lcol){ // nastaví barvu okrajů
if($this->is_color($lcol) == false){
return false;
}
if($this->object != 0){
return false;
}
$this->fcol_r = $lcol[0];
$this->fcol_g = $lcol[1];
$this->fcol_b = $lcol[2];
return true;
}
function Background($lcol){ // nastaví barvu pozadí
if($this->is_color($lcol) == false){
return false;
}
$this->bgcol_r = $lcol[0];
$this->bgcol_g = $lcol[1];
$this->bgcol_b = $lcol[2];
return true;
}
function Clean(){ // vyčistíme obrázek
for($lu=0; $lu < $this->used; $lu++){
$image[$lu] = NULL;
}
return true;
}
function Set(){ // nastaví, se kterým obrázkem se má pracovat
$GLOBALS["image_act"] = $this;
}
function Projection($type){ // typ projekce
if($type != PERSPECTIVE && $type != ORTOGRAPHIC){
return;
}
$this->project = $type;
}
}
/*** 2D mód ***/
function m2DPixel($lx, $ly){ // nakreslí pixel
global $image_act;
if($image_act->mode != m2D){
return false;
}
$image_act->pixel($lx, $ly);
return true;
}
function m2DLine($sx, $sy, $ex, $ey){ // kreslí úsečku
global $image_act;
if($image_act->mode != m2D){
return false;
}
return $image_act->line($sx, $sy, $ex, $ey);
}
function m2DRect($sx, $sy, $ex, $ey, $trans=false){ // kreslí obdélník
global $image_act;
if($image_act->mode != m2D){
return false;
}
m2DLine($sx, $sy, $ex, $sy);
m2DLine($ex, $sy, $ex, $ey);
m2DLine($ex, $ey, $sx, $ey);
m2DLine($sx, $ey, $sx, $sy);
if($trans == false){
$image_act->SwapColor();
$minx = 1;
$miny = 1;
if($sx > $ex){
$minx = -1;
}
if($sy > $ey){
$miny = -1;
}
for($fy=1; $fy < abs($sy-$ey); $fy++){
for($fx=1; $fx < abs($sx-$ex); $fx++){
$image_act->pixel($sx+($fx*$minx), $sy+($fy*$miny));
}
}
$image_act->SwapColor();
}
return true;
}
function m2DFilter($type){ // nejrůznější efekty
global $image_act;
if($image_act->mode != m2D){
return false;
}
switch($type){
case stripes-x: // svislé pruhy
{
for($fy=0; $fy < $image_act->height; $fy++){
for($fx=0; $fx < $image_act->width-1; $fx+=2){
$lpx[0] = $image_act->bgcol_r;
$lpx[1] = $image_act->bgcol_g;
$lpx[2] = $image_act->bgcol_b;
if($this->image[($image_act->width*$fy)+$fx] != NULL){
$lpx = explode("_", $image_act->image[($image_act->width*$fy)+$fx]);
}
$lpx[0] += 50;
$lpx[1] += 50;
$lpx[2] += 50;
if($lpx[0] > 255){
$lpx[0] = 255;
}
if($lpx[1] > 255){
$lpx[1] = 255;
}
if($lpx[2] > 255){
$lpx[2] = 255;
}
$image_act->image[($image_act->width*$fy)+$fx] = $lpx[0] ."_". $lpx[1] ."_". $lpx[2];
}
}
break;
}
case stripes-y: // vodorovné pruhy
{
for($fy=0; $fy < $image_act->height-1; $fy+=2){
for($fx=0; $fx < $image_act->width; $fx++){
$lpx[0] = $image_act->bgcol_r;
$lpx[1] = $image_act->bgcol_g;
$lpx[2] = $image_act->bgcol_b;
if($image_act->image[($image_act->width*$fy)+$fx] != NULL){
$lpx = explode("_", $image_act->image[($image_act->width*$fy)+$fx]);
}
$lpx[0] += 50;
$lpx[1] += 50;
$lpx[2] += 50;
if($lpx[0] > 255){
$lpx[0] = 255;
}
if($lpx[1] > 255){
$lpx[1] = 255;
}
if($lpx[2] > 255){
$lpx[2] = 255;
}
$image_act->image[($image_act->width*$fy)+$fx] = $lpx[0] ."_". $lpx[1] ."_". $lpx[2];
}
}
break;
}
default:
{
return false;
}
}
return true;
}
/*** 3D mód ***/
function m3DBegin($lobj){ // začátek kreslení objektu
global $image_act;
if($image_act->mode != m3D || $image_act->object != 0){
return false;
}
$image_act->object = $lobj;
return true;
}
function m3DEnd(){ // konec kreslení objektu
global $image_act;
if($image_act->mode != m3D || $image_act->object == 0){
return false;
}
for($lu=0; $lu < $image_act->used_vert; $lu++){
$l_pol = explode("_", $image_act->vertex[$lu]);
$image_act->point($l_pol[0], $l_pol[1], $l_pol[2]);
}
for($lu=0; $lu < $image_act->used_vert; $lu++){
$image_act->vertex[$lu] = NULL;
}
$image_act->used_vert = 0;
$image_act->object = 0;
return true;
}
function m3DSetMode($lmd){ // okraje / výplň
global $image_act;
if($image_act->mode != m3D){
return false;
}
if($lmd != FILL && $lmd != BORDER){
return false;
}
$image_act->show = $lmd;
return true;
}
function m3DReset(){
global $image_act;
if($image_act->mode != m3D || $image_act->object != 0){
return false;
}
$image_act->trans_x = 0;
$image_act->trans_y = 0;
$image_act->trans_z = 0;
$image_act->rot_x = 0;
$image_act->rot_y = 0;
$image_act->rot_z = 0;
return true;
}
function m3DTranslate($lx, $ly, $lz=0.0){ // posun scény
global $image_act;
if($image_act->mode != m3D || $image_act->object != 0){
return false;
}
$image_act->trans_x += $lx;
$image_act->trans_y += $ly;
$image_act->trans_z += $lz;
return true;
}
function m3DRotate($lx, $ly, $lz){ // rotace scény
global $image_act;
if($image_act->mode != m3D || $image_act->object != 0){
return false;
}
$image_act->rot_x += $lx;
$image_act->rot_y += $ly;
$image_act->rot_z += $lz;
return true;
}
function m3DVertex($lx, $ly, $lz=0.0){ // vrchol
global $image_act, $dtor, $rtod;
if($image_act->mode != m3D || $image_act->object == 0){
return false;
}
$l_ry = sqrt(($lz*$lz)+($lx*$lx));
$a_ry = acos($lz/$l_ry) + ($image_act->rot_y*$dtor);
echo(($l_ry)."<br>");
$lx += $image_act->trans_x;
$ly += $image_act->trans_y;
$lz += $image_act->trans_z;
$image_act->vertex[$image_act->used_vert] = $lx ."_". $ly ."_". $lz;
$image_act->used_vert ++;
return true;
}
// zakladni geom. tvary
function cube($a){
$a = $a/2;
m3DBegin(QUAD);
m3DVertex( $a,-$a, $a); // predni
m3DVertex( $a, $a, $a);
m3DVertex(-$a, $a, $a);
m3DVertex(-$a,-$a, $a);
m3DVertex( $a,-$a,-$a); // zadni
m3DVertex( $a, $a,-$a);
m3DVertex(-$a, $a,-$a);
m3DVertex(-$a,-$a,-$a);
m3DVertex( $a,-$a,-$a); // prava
m3DVertex( $a, $a,-$a);
m3DVertex( $a, $a, $a);
m3DVertex( $a,-$a, $a);
m3DVertex(-$a,-$a,-$a); // leva
m3DVertex(-$a, $a,-$a);
m3DVertex(-$a, $a, $a);
m3DVertex(-$a,-$a, $a);
m3DVertex( $a, $a, $a); // horni
m3DVertex( $a, $a,-$a);
m3DVertex(-$a, $a,-$a);
m3DVertex(-$a, $a, $a);
m3DVertex( $a,-$a, $a); // dolni
m3DVertex( $a,-$a,-$a);
m3DVertex(-$a,-$a,-$a);
m3DVertex(-$a,-$a, $a);
m3DEnd();
}
?>
Oobrázek má kód
<?
include("image.php"); // vložíme třídu
$img = new Image(200, 200, m2D); // 2D obrázek, 200px * 200px
if($img->done == false){ // nastala chyba?
die("Error");
}
$img->Clean(); // vymažeme obrázek
$bcg = array(255, 40, 0); // barvy (RGB)
$fg = array(0, 0, 0);
$bg = array(0, 255, 40);
$img->Background($bcg);
$img->ColorFG($fg);
$img->ColorBG($bg);
$img->set(); // do kterého obrázku budeme kreslit
m2DLine(0, 0, 200, 200); // čára z levého dolního do pravého horního rohu
m2DRect(40, 100, 180, 60); // vyplněný obdélník
m2DRect(80, 10, 140, 180, true); // obdélník
$img->ShowBMPImage(); // ukážeme BMP obrázek
?>
To Zelenáč : takové dlouhé kody pls jako přílohu!!!
A navíc, tazatel myslel něco jiného.
To inFFx : Jestli tě správně chápu... tvůj problém řeší hlavně javascript. Ano, musíš to potom uložit pomocí něčeho, co pracuje na serveru, tedy např. PHP, ale to je to poslední.
Dotez polož spíš někde jinde a obecně si myslím, že něco, co požaduješ, není příloš reálné.
Část diskuze pokračuje v novém vláknu Připojit soubor nebo vložit zdroják?: (http://programujte.com/index.php?akce=diskuze&kam=vlakno&tema=7009-pripojit-soubor-nebo-vlozit-zdrojak-)
WTF?CuroBOT napsal:
Část diskuze pokračuje v novém vláknu Připojit soubor nebo vložit zdroják?: (http://programujte.com/index.php?akce=diskuze&kam=vlakno&tema=7009-pripojit-soubor-nebo-vlozit-zdrojak-)
Tocimanko napsal:
Zvlastne... Pozrite ten link, na ktory odkazuje Curo(Bot)... V linku je nazov vlakna, v ktorom udajne mala pokracovat diskusia.. Nie, CuroBot sa nezblaznil... To sa zblaznilo nieco ine... =O
Ten "nazev" je tam jen kvuli botum... Dulezite je poze to cislo na zacatku ;-)
To inFFx : Abych se vrátil k Tvému prvotnímu dotazu. Nejsem si jist, že by něco takového fungovalo na PHP, či JS. Protože tady se jedna o jasnou tvorbu grafiky. Což PHP dokáže, ale díky tomu, že je to serverový skript se musí stránka pokaždé načíst, aby se funkce mohla znovu provést. A co se týká využití JS. Ten je sice klientský a dokáže Ti odchytit jak kliknutí myši, tak i polohu kurzoru, ale zase není schopen kreslit. Jestli mohu doporučit, tak podobné věci se vytváří jako applety v Javě, případně v Delphi.
to že javascript neumí kreslit tak docela není pravda.. zkus omrknout "canvas". (netvrdím že v JS jde kreslit nějak bravůrně, ale jisté srandičky s tím jdou dělat - viděl jsem příklad na hodiny).
To Zelenáč : nebo přesunul ;)
To Zelenáč : to bylo obecne :) netuším, o kterých přesně mluvíš :) ale obecně, přesouvám věci ohledně mod_Rewitu.. ;) ale neboj, jinak nic víc.. ale "pracuje" tu taky někdo dalši.. takže kdoví.. .;)
To Anonymní uživatel : Ano, to je vlastně pravda. Ale i tak nejsi schopen s tím zacházet jako v kreslení, nebo třeba jako v tom příkladě, který zde byl.
Na to kreslenie sa dá isť nejakým externým objektom, najjednoduchšie je to spomínaný Canvas, no mne sa s ním veľmi nedarilo, tak som skúšal vkladať SVG dokument. Zjednodušene (ale myslím že postačujúco) ho podporujú Firefox, opera, safari, ... Jeho plná podpora sa dá doinštalovať (adobe plugin do browsera). Potom už je len na programátorovi, vybaviť sa s Javascriptom... Ja som tým riešil lokálne vykreslované grafy a dynamicky sa prenášali len data. Tiež ma napadlo, že by to šlo aj flashom, s ním však veľa skúsenosti nemám, tak som sa do toho nepúštal. Myslím však, komunikácia JS<>FLASH možná je, takže by to až taký problém byť nemal. Teoreticky by to malo byť aj rýchlejšie ako SVG.
Ak sa do toho niekto pustí, tak držím palce ;-)
kreslit v PHP přímo na webu bez JS sice lze, ale nedostatek toho řešení je v rychlosti. Jestliže uživatel (kreslič) nemá garantovaný vysokorychlostní přípoj přímo na PHP server, tak to je dost na nic, protože odezvy jsou zpožděné. Kreslič kreslí mnohem rychleji, než se stíhá přenost na server a zobrazuje se odezva zpět.
Pochopitelně, jiná situace je, když PHP server mám pod stolem kde sedím a jiná je situace, když PHP server je tisíce km daleko a já se k němu připojuji přes mobilkový internet a na mobilku chci kreslit něco dost složitého ...
Lepší řešení je kreslit lokálně a výsledek, třeba po blocích přesouvat na PHP server. Obrázek pak jakoby "poskakuje" vytváří se po skocích. Přesouvání po blocích lze vyřešit tlačítkem nebo automaticky.
Tímto způsobem fungují například cloudové programy pro návrh plošných spojů. Nevýhoda těchto cloudových řešení tvorby projektu z pohledu uživatele je ale v ochraně projektu. Ale to už je jiná kapitola.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
LBA přímo z IO portů? — založil Matěj Andrle
SQL client přímo přes socekt — založil Pawl
Jde ve VBA přímo uvolnit paměť? — založil Kartik
Spuštění jiného programu přímo z Pythonu — založil Mirek
PHP generuje JS -> přímo v html kódu — založil ETNyx
Moderátoři diskuze