Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] img -> txt
Forum PHP.pl > Inne > Oceny
zYm3N
Może komuś się przyda/kogoś zainteresuje..

nie miałem gdzie tego rzucić:-)

http://imagelab.pl/zymen/ascii/

Działa dla jpg/png. Nad gif-ami pracuję :-)
hwao
Niezle naprawde :-) jeszcze jakby lepiej kolor oddawalo :-)
http://imagelab.pl/zymen/ascii/index.php?n...%2FHPIM0623.jpg
Troche duze moze zrob jakies ogranicoznie co do wielkosci a pozatym moglbys opisac po krotce jak to robisz (za jakich funckji kozystasz)
shpyo
też się bawiłem w to biggrin.gif
http://jojo.one.pl/~shpyo/

na asci jest beger jakby ktoś miał wątpliwości tongue.gif (fotka: http://jojo.one.pl/~shpyo/beger.jpg)
jeszcze muszę się pozbyć "kurwików" (wiem już jak) i sformatować text biggrin.gif

ale muszę przyznać że znaczniej lepsze ascii masz niż moje tongue.gif

pozdro,
shpyo

ps. pixel uśredniasz, nie?
zYm3N
Może kogoś zainteresuje ? :-)
Co do kolorów, tło psuje trochę, ale jak ustawie białe, to całkiem dziwnie wygląda :] może w przyszłości stworzę dynamiczne (ustawiane przez użytkownika :])..

Reszta kodu tutaj: Jak widać, nic nie uśredniam.. no a zmniejszyć nie mogę, bo wtedy będą zbyt mocne przejścią pomiędzy punktami.. no chyba, że zrobię zmniejszenie,ale wtedy obrazki staną się mniej widoczne.. :|

  1. <html>
  2. <head>
  3. <link href=\"zymen.css\" rel=\"stylesheet\" type=\"text/css\">
  4. </head>
  5. <body>
  6. <form action=\"index.php\" method=\"GET\">
  7. <table border=1 cellspacing=0 cellpadding=0 align=\"center\">
  8. <tr><td style=\"color:rgb(255,255,255)\">Http pliku:</td><td><input type=\"text\" name=\"nazwa_pliku\" class=\"text\" value=\"<?=$_GET['nazwa_pliku'];?>\"></td></tr>
  9. <tr><td colspan=2 align=\"center\"><input type=\"submit\" value =\"Twórz!\"></td></tr>
  10. </table>
  11. </form> <BR><BR>
  12.  
  13. <?
  14.  if (isset($_GET['nazwa_pliku']))
  15.  {
  16.  $plik_in = fopen($_GET['nazwa_pliku'], &#092;"r\");
  17.  $extension = eregi(&#092;"[.](jpg|jpeg|gif|png)$\",$_GET['nazwa_pliku'], $out);
  18.  $file_name_tmp = &#092;"tmp/\".rand(0,10000).$out[0];
  19.  $plik_out = fopen( $file_name_tmp, &#092;"w\");
  20.  //udalo sie ?
  21.  if (!$plik_in || !$plik_out)
  22.  {
  23. echo('<p style=\"font-size:10px; color:rgb(255,255,0)\">I can't read file!</p>');
  24. exit();
  25.  }
  26.  //to czytajmy!
  27.  while(!feof($plik_in))
  28.  {
  29.  $data = fread($plik_in, 128);
  30.  fwrite($plik_out, $data);
  31.  }
  32.  fclose($plik_in);
  33.  fclose($plik_out);
  34.  
  35.  
  36.  
  37.  switch(strtolower($out[1]))
  38.  {
  39.  case 'jpg':case 'jpeg':{$pict = ImageCreateFromJPEG($file_name_tmp);break;}
  40.  case 'gif':{$pict = ImageCreateFromGIF($file_name_tmp);break;}
  41.  case 'png':{$pict = ImageCreateFromPNG($file_name_tmp);break;}
  42.  }
  43. // header('Content-type: image/png');
  44.  $x = imagesx($pict);
  45.  $y = imagesy($pict);
  46.  
  47.  $tekst = \"@\";
  48.  
  49.  $rozmycie = 10;
  50.  
  51.  
  52.  echo('<span>');
  53.  $ktory_znak=0;
  54.  for($y_=0; $y_<$y; $y_+=3)
  55.  {
  56.  for($x_=0; $x_<$x; $x_+=2.25)
  57.  {
  58. $ktory_znak+=1;
  59. // $znak = $tekst[$ktory_znak%strlen($tekst)];
  60. $znak = $tekst[rand(0,count($tekst)-1)];
  61.  
  62. $rgb = ImageColorAt($pict, $x_, $y_);
  63. if ($ostatni_kolor+$rozmycie >= $rgb && $ostatni_kolor-$rozmycie <= $rgb)
  64. {
  65. echo($znak);
  66. }else
  67. {
  68. $r = ($rgb >> 16) & 0xFF;
  69. $g = ($rgb >> 8) & 0xFF;
  70. $b = $rgb & 0xFF;
  71. $ostatni_kolor=$rgb;
  72. echo('</span>'.'<span style=&#092;"color:rgb('.$r.','.$g.','.$b.');\">'.$znak);
  73. }
  74.  }
  75.  echo(&#092;"</span><br>n\");
  76.  $ostatni_kolor=-1;
  77.  }
  78.  unlink( $file_name_tmp);
  79.  }
  80.  include('licznik.php');
  81. ?>
Vertical
Niezły pomysł, ale strasznie długo się miejscami ładuje. Jeszcze jedno: Źle się obrazki wczytują... Powstają jakieś czarne "luki" w obrazku
Chewolf
fajne ! proste a najwazniejszy jest pomysl... pomysl jest super... jeszcze tylko jakby znaczki byly mniejsze ... i moze inny ksztalt ?
zYm3N
vertical: to ze sie dlugo laduje, to faktycznie racja. Wiem, jak zmniejszyc dosc znaczaco czas ladowania, ale jesli nie bedzie zainteresowania to nie ma sensu skryptu rozwijac :-) Natomiast co do czarnych dziur.. moglbys mi podac obrazek na ktorym takie cos wystepuje ? (png && jpg powinno pykać poprawnie)

m5910: mniejsze.. no dobra :-) Chyba, jednak wkrotce zrobie ten skalomierz ;D Nastomiast pytanie mam jedno: co z tymi innymi kształtami ? Jak to rozumiesz ? Mógłbyś rozwinąć ? Dzięki..


Ogólnie, to dzięki za ciepłe słowa :-) Posiedziałem nad tym skryptem trochę (2-3 godzinki pisania i z 1h 'pucowania') no i jako tako pyka :-)

pozdr.
Seth
Cytat
Warning: set_time_limit(): Cannot set time limit in safe mode in /home/image/public_html/zymen/ascii/index.php on line 14
winksmiley.jpg

Fajny skrypt chociaz po tytule sadzilem, ze generuje on tego typu obrazki: http://www.chris.com/ascii/ winksmiley.jpg
spenalzo
Kiedyś zrobiłem podobny skrypt, i obiektywnie patrząc był lepszy tongue.gif - gdzieś chyba nawet podawałem go w zeszłym roku na forum.
Drastycznie ocene zaniża monstrualny rozmiar strony (przy linku który podał hwao) wiec mozilla przy 512 Ram ledwo chodzi... Musisz zrobić odpowiedni przeskok pikseli w zależności o szer/wys obrazka.
Jeżeli chodzi o wypełnianie, to z moich eksperymentów wynika, że najlepszy efekt daje pogrubiona @ .
Paul
Moze troche OT bedzie winksmiley.jpg:

Napisalem kiedys troche inny skrypt, robiacy z obrazka htmlowa tabelke smile.gif

Cytat(spenalzo @ 2004-11-03 02:01:20)
mozilla przy 512 Ram ledwo chodzi...

Hehe... Mozilla wysiada (zaczyna żreć 150MB ramu i zwisa) na moim skrypcie przy obazkach 400x400 smile.gif Nie mowiac juz o IE ktory powyzej 300x300 zaczyna gubic kolory w polowie komorek smile.gif
  1. <?php
  2. function tohex($color){
  3. $color = dechex($color);
  4. if(strlen($color) == 1){
  5. $color = '0' . $color;
  6. }
  7. return $color;
  8. }
  9. $error = '';
  10. if( !empty($_GET['path']) ) { 
  11. $imgsize = @getimagesize($_GET['path']);
  12. list($szer, $wys) = $imgsize;
  13. switch($imgsize[ 'mime' ]) {
  14. case 'image/jpeg':
  15.  $img = imagecreatefromjpeg($_GET['path']);
  16. break;
  17. case 'image/png':
  18.  $img = imagecreatefrompng($_GET['path']);
  19. break;
  20. case 'image/gif':
  21.  $img = imagecreatefromgif($_GET['path']);
  22. break;
  23. default:
  24.  $error = '<b>Zły format pliku lub plik nie istnieje</b><br><br>';
  25. }
  26. $pixels = $szer * $wys;
  27. $wiersz = 0;
  28. $kolumna = 0;
  29. $px_szer = intval($_GET['px_szer']);
  30. $px_wys = intval($_GET['px_wys']);
  31. $cellspacing = intval($_GET['cellspacing']);
  32. if($px_szer < 1) {
  33. $px_szer = 1;
  34. }
  35. if($px_wys < 1) {
  36. $px_wys = 1;
  37. }
  38. if($cellspacing < 0) {
  39. $cellspacing = 0;
  40. }
  41. }
  42. echo '<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"><html><head><title></title><style type=\"text/css\">table, td{border: none;padding: 0px;color:#fff;font-family:verdana;font-size:10pt;}'. (isset($img) ? 'td{width:'. $px_wys .';height: '. $px_szer .';}' : '') .'body{background-color:#000;margin:0;padding:0;}a{color:#fff;}</style><meta http-equiv=\"Content-type\" content=\"text/html; charset=iso-8859-2\"></head><body><table style=\"width:100%;height:100%;\"><tr><td align=\"center\" style=\"width:100%;height:100%;\">';
  43.  
  44. if(!empty($error) || empty($_GET['path'])) {
  45. echo $error . '<form action=\"?\" style=\"margin:0;\"><table width=\"400\"><tr><td>Wpisz ścieżkę pliku (*.jpg, *.png, *.gif):</td><td><input type=\"text\" name=\"path\" value=\"'. (isset($_GET['path']) ? $_GET['path'] : '') .'\"></td></tr><tr><td>Szerokość piksela:</td><td><input type=\"text\" name=\"px_szer\" value=\"'. (isset($_GET['px_szer']) ? $_GET['px_szer'] : '') .'\"></td></tr><tr><td>Wysokość piksela:</td><td><input type=\"text\" name=\"px_wys\" value=\"'. (isset($_GET['px_wys']) ? $_GET['px_wys'] : '') .'\"></td></tr><tr><td>Odstęp między pikselami:</td><td><input type=\"text\" name=\"cellspacing\" value=\"'. (isset($_GET['cellspacing']) ? $_GET['cellspacing'] : '') .'\"></td></tr></table> <input type=\"submit\" value=\"OK\"></form>';
  46. } else {
  47.  echo '<table cellspacing=\"'. $cellspacing .'\"><tr>';
  48.  for($i=0; $i < $pixels; $i++) {
  49. $rgb = imagecolorsforindex($img, imagecolorat($img, $kolumna, $wiersz));
  50. echo '<td bgcolor=\"#'. tohex($rgb['red']) . tohex($rgb['green']) . tohex($rgb['blue']).'\"></td>';
  51. if($kolumna == $szer - 1) {
  52.  $wiersz++;
  53.  $kolumna = 0;
  54.  echo '</tr>';
  55.  if($i + 1 < $pixels) {
  56.  echo '<tr>';
  57.  }
  58.  
  59. } else {
  60.  $kolumna++;
  61. }
  62.  }
  63.  echo '</table><br><br><a href=\"javascript:history.back();\">Wróć</a>';
  64. }
  65. echo '</td></tr></table></body></html>';
  66. ?>
rogrog
fajne... najlepiej działa przy dużych obrazkach (np.)

przy małych wychodzi trochę mało czytelnie...
Vertical
Cytat
moglbys mi podac obrazek na ktorym takie cos wystepuje ?

Pod Operą 7.11 występuje to na obrazku http://jacuimage.republika.pl/thunder.jpg
zYm3N
Dziękuję wszystkim za odpowiedzi.

Widać jest jako takie zainteresowanie, wobec czego wkrótce poprawię skrypt :] Tak, aby szersze grono użytkowników mogło z niego korzystać.

Dziękuję bardzo za konstruktywne uwagi, na pewno wezmę je do siebie i wprowadzę przy implementowaniu kolejnej wersji skryptu (teraz już na klasie..)

Tak więc oczekujcie nowego skryptu biggrin.gif

pozdr.
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.