Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][AJAX] Rysowanie jak w paincie
Forum PHP.pl > Forum > Przedszkole
fenix.robi
Witam,

Chciałbym napisać cos w stylu internetowego painta opartego na ajax'ie i php, cos w ten deseń:

http://www.pixlr.com/editor/?loc=pl

tylko nie we flash'u.

1. Czy to jest możliwe.

2. Czy jest już może jakaś biblioteka ajax'a ktora oferuje obrobke grafiki etc.

3. Jeśli macie jakieś materiały, tutoriale bardziej szczegułowe pod tem temat bardzo bym był wdzieczny

PS. http://pl.lmgtfy.com/?q=ajax-image-draw & http://pl.lmgtfy.com/?q=ajax-image-editor szukałem



Na poczatek chciałem zrobić zwykłe rysowanie po utworzunym obrazku 

- tworze obrazek funkcją createimage() w php i go wyswietlam w przegladarce gdzie lewy gorny róg jest zawsze w tej samej odległości od punktu 0px; 0px przegladarki

- na obrazku sprawdzam zdarzenie onClick i jesli jest ono w obszarze obrazka to rysuje kropke funkcja imagesetpixel() we wpółrzednych myszki, i sprawdza czy wspolrzedne są rózne od poprzednich, jesli tak to rysuje nastepny pixel, oczywiśćie dziala dopóki klawisz myszy jest nacisniety.

na poczatek chciałeby cos takiego jak w tej grze: http://www.gry.jeja.pl/652,zbiorowe-rysowanie.html 

Jesli popełniłem jakiś błąd w algorytmie i jesli da się go wykonać to bedę wdzieczy za pomoc/propozycjie/rady

edit: ahh mysłem ze pisze w dziale [xml/ajax] jesli to nie sprawi problemu to prosze o przeniesienie do tego dzialu biggrin.gif
erix
Cytat
- na obrazku sprawdzam zdarzenie onClick i jesli jest ono w obszarze obrazka to rysuje kropke funkcja imagesetpixel() we wpółrzednych myszki, i sprawdza czy wspolrzedne są rózne od poprzednich, jesli tak to rysuje nastepny pixel, oczywiśćie dziala dopóki klawisz myszy jest nacisniety.

Raczej onmousedown/up. Z przekazaniem punktów do PHP nie byłoby problemu, gorzej chyba z wyświetlaniem po stronie klienta. I tu zostaje w zasadzie tylko <canvas />, ale to wyklucza IE z użytku. Niestety, więcej nie pozostaje nic prócz Flasha/apletu w Javie.

Cytat
edit: ahh mysłem ze pisze w dziale [xml/ajax] jesli to nie sprawi problemu to prosze o przeniesienie do tego dzialu

Twój problem, to raczej DHTML, nie AJAX. tongue.gif
fenix.robi
Dopiero zająłem sie tym skryptem, lecz natrafiłem na pewne trudnosci, funkcja onmousedown nie wywołuje mi funkcji rysuj, gdy dam jak w przykładach onmousedown="alert('cos tam ');" to wyswielta komunikat, a jesli chcem dac onmoisedown="rysuj();" to nic nie pokazuje, nie wiem czy mam cos przekazywac w funkcji i jakie "krzaki" dalej napisałem, a oto kod:

index.php

  1. if (!file_exists("./grafika/obrazek.jpg"))
  2.  include("./inc/nowy.inc.php");
  3. ?>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  5. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  6. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
  7. <head>
  8.  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  9.  <link rel="stylesheet" type="text/css" href="main.css" />
  10.  <title>::Rysowanie::</title>
  11.  <script type="text/javascript">
  12.  // <!-- <![CDATA[
  13.  function rysuj_start()
  14.  {
  15.      var mysz_x = event.clientX -50; //poniewaz rysunek zaczyna się od wspoóarzednych 50,50
  16.      var mysz_y = event.clientY -50; //narazie na sztywno
  17.      window.location= './inc/rysuj.inc.php?x='mysz_x'&y='mysz_y;     
  18.  }
  19.  function rysuj_stop()
  20.  {
  21.      window.opener.location.reload();
  22.      alert("Powinno cos powstac");
  23.  
  24.  }
  25.  function rysuj(handler, event)
  26.  {
  27.      document.addEventListener('mousemove', rysuj_start(), true);
  28.      document.addEventListener('mouseup', rysuj_stop(), true);
  29.  }
  30.  // --> ]]>
  31.  </script>
  32. </head>
  33. <body id="body">
  34.  <div id="srodek">
  35.          <img src="./grafika/obrazek.jpg" onmousedown="rysuj();"/>
  36.  <div>
  37. </body>
  38. </html>
rysuj.inc.php

  1.  $x = $_GET['x'];
  2.  $y = $_GET['y'];
  3.  $sciezka = "../grafika/obrazek.jpg";
  4.  $img   = imagecreatefromjpeg($sciezka)
  5.  or die("Nie można otworzyc obrazka");  
  6.  $pixel  = ImageColorAllocate($img, 0,0,0);
  7.  imagesetpixel($img,$x,$y,$pixel);
  8.  imagesetpixel($img,$x-1,$y,$pixel);
  9.  imagesetpixel($img,$x+1,$y,$pixel);
  10.  imagesetpixel($img,$x,$y-1,$pixel);
  11.  imagesetpixel($img,$x,$y+1,$pixel);
  12.  ImageJPEG($img,$sciezka, 100);
  13.  imagedestroy($img);
  14.  header("Location: ../index.php"); // questionmark.gif
  15. ?>
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.