IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[Ludique] Défis code en un tweet


Sujet :

JavaScript

  1. #201
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Un 360° de ta page. Je l'ai testé sur Firefox en dernière version, ça fonctionne.

  2. #202
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    héhé fun
    Comme l'easter egg lors d'une recherche "do a barrel roll" Google en somme. Mais je me demande s'il le fait en 139 caractères
    D'ailleurs 138 avec le point virgule final en moins

    @NoSmoking, excellent ! Mais ça ne semble pas passer sur Chrome

  3. #203
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Afficher une image en ascii : http://jsfiddle.net/Kaamo/Vv92w/
    En 102 caractères. J'aurai peut-être pu inclure les conversions canvas, ça aurait pu passer dedans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function imgToAscii(d,w,h,t,s,i,o){
    for(s=i=0;i++<w*h;s+=i%w?'.;1@'[(d[o+3]?(d[o]+d[o+1]+d[o+2])/3:0)*0.0156^0]:'<br>')o=i*4;t.innerHTML=s
    })(dataCanvas, w, h, tdResultat)
    dataCanvas est un tableau contenant les données rgba de l'image. (on dessine l'image grâce à canvas préalablement puis on récupère les données dudit canvas)
    w, h la largeur et la hauteur de l'image d'origine
    tdResultat où est affiché l'ascci

    Plus de détails et explications dans le fiddle. On est limité par le SOP, du coup j'ai topé une image interne de jsfiddle pour illustrer le propos.
    En local, j'ai testé avec le logo de DVP et ça rend plutôt pas mal avec seulement quatre caractères : .;1@. Avec plus de caractères, on peut affiner le rendu final je pense au niveau du contraste.

    Je joue pas mal avec les ratio donc ça peut merder sur certains écrans et ça ne semble pas marcher avec les grosses images. On dirait que l'affichage est limité dans la table

  4. #204
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 110
    Points : 44 919
    Points
    44 919
    Par défaut

    Que dire de plus....

    ha! si
    il te faut démarrer la boucle par un for(s=i=''; pour éviter un disgracieux 0 en haut à gauche et un point de trop sur la première ligne en haut à droite.

    Je mets pour les esthètes un copie d'écran sous FireFox
    encore
    Images attachées Images attachées  

  5. #205
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Merci ! Mais j'avais déjà réalisé un truc similaire à l'époque en m'étant inspiré de codes existants, c'était donc un simple portage donc c'est pas vraiment un exploit
    il te faut démarrer la boucle par un for(s=i=''; pour éviter un disgracieux 0 en haut à gauche
    C'était pour sauver un caractère. Vu la taille des caractères me suis dit que ça ne se verrait pas Mais oui, poru 1 de plus on peut se permettre

    en fait ça se simplifie encore ... en 97 :
    52e-4 : 4 / 255 / 3 (avec 4 : taille du tableau de correspondance, 255 pour la couleur, 3 pour la moyenne rgb)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(s=i='';i++<w*h;s+=i%w?'.;1@'[(d[o=i*4+3]?d[o]+d[o+1]+d[o+2]:0)*52e-4^0]:'<br>');t.innerHTML=s
    Du coup, je vais inclure les transformations canvas pour pouvoir passer en paramètres une image carrément

  6. #206
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    C'est vraiment cool ça

    En plus on peut modifier le contraste à la volée en diminuant la constante 52e-4

    Au fait, tu peux remplacer <br> par "\n", ça marche aussi et c'est plus propre. Et pourquoi utiliser un tag table avec une seule cellule ?

    Tu peux caser le getImageData dans les 140 chars, et passer une fonction d'affichage de sortie plutôt qu'un élément HTML.

    Voilà ce que ça donne : http://jsfiddle.net/Vv92w/12/

    Enfin, comme caractères je verrais bien ceux là plutôt : ░▒▓█

  7. #207
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Au fait, tu peux remplacer <br> par "\n",
    En faisant ça, l'image se dédouble. Du coup obligé de jouer sur le line-height et le font-size ce qui agrandit l'image d'origine considérablement
    Et pourquoi utiliser un tag table avec une seule cellule ?
    Le formatage se fait bien dans un td. Je n'ai pas réussi à avoir la même précision que ce soit avec un span ou un div. C'est peu-être possible en jonglant mieux avec le CSS, je suis pas assez calé pour trouver l'astuce
    Tu peux caser le getImageData dans les 140 chars, et passer une fonction d'affichage de sortie plutôt qu'un élément HTML.
    Ouais ! On peut même caser le drawImage je pense aussi. Ainsi on ne pourra passer à la fonction que l'élément image cible directement
    Enfin, comme caractères je verrais bien ceux là plutôt : ░▒▓█
    ça fait pas terrible niveau contraste je trouve, chez toi si ?

  8. #208
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    135 caractères avec le canvas à l'intérieur.

    Il faut passer à la fonction :
    - le contexte canvas
    - l'élément image
    - la largeur / hauteur
    - la fonction de rendu

    Au préalable, il faut récupérer un élément image. Lui passer un src, et exécuter la fonction lorsque l'image est bien chargée.

    Enfin, il faut écrire le résultat dans un td et bien configurer le CSS pour un affichage optimal (dépendant de l'écran à priori)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var imgHTML  =  document.getElementById('imageBase')
    imgHTML.src = '../../../img/initializing.png';
     
    imgHTML.onload = function() {
      (function imgToAscii(c,e,w,h,p,s,i,o){
      for(c.drawImage(e,s=i='',0),d=c.getImageData(0,0,w,h).data;i++<w*h;s+=i%w?'.;1@'[(d[o=i*4+3]?d[o]+d[o+1]+d[o+2]:0)*5e-3^0]:'<br>');p(s)
      })(document.createElement('canvas').getContext('2d'), this, this.offsetWidth, this.offsetHeight, function(result){document.getElementById('resultat').innerHTML = result;})
    }
    http://jsfiddle.net/Kaamo/Vv92w/

    Bref, y'a quand même pas mal de "il faut"

  9. #209
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Citation Envoyé par Kaamo Voir le message
    En faisant ça, l'image se dédouble. Du coup obligé de jouer sur le line-height et le font-size ce qui agrandit l'image d'origine considérablement
    Je ne vois pas ce problème. Sur Google Chrome en tout cas, j'ai exactement le même résultat avec <br> et \n

    Citation Envoyé par Kaamo Voir le message
    Le formatage se fait bien dans un td. Je n'ai pas réussi à avoir la même précision que ce soit avec un span ou un div. C'est peu-être possible en jonglant mieux avec le CSS, je suis pas assez calé pour trouver l'astuce
    J'ai du mal à comprendre ce que ça change en matière de précision. C'est toujours du texte à chasse fixe dans tous les cas, ça devrait bien se comporter.

    Citation Envoyé par Kaamo Voir le message
    ça fait pas terrible niveau contraste je trouve, chez toi si ?
    C'est parce que le line-height et le letter-spacing sont trop resserrés, ça se marche dessus et ça fait trop foncé. Je pense qu'on peut apporter une granularité à 8 niveaux de gris plutôt que quatre, et se servir des caractères ombres pour mieux présenter les dégradés foncés.

  10. #210
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Sur le fiddle tel qu'il est actuellement, si je remplace <br> par \n, ça dédouble l'image ascii finale. Et ceci aussi bien sur le dernier Chrome que le dernier Firefox.

    En effet, ça marche bien dans une div par exemple. Il suffisait de retirer display: inline;
    J'ai épuré le CSS dans la dernière version du fiddle.

    Oui, il faudrait tester avec 8 niveaux, calculer la nouvelle constance en conséquence et adapter le CSS. Un plus grand espacement des lettres, une taille d'écriture réduite :
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    div {
        letter-spacing: 2px;
        font-size: 1px;
        line-height: 2px;
        font-family: "courier new";
    }

  11. #211
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function message()
    {
        alert("Vous êtes une bande de cinglés !\nBravo pour ce travail !");
    }
    je tiens en moins de 140 caractères ?

  12. #212
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Ah oui j'ai reproduit l'effet du dédoublement ! Avec des images plus petites, elle s'affiche même 3 voire 4 fois. C'est incompréhensible
    En augmentant la font-size ou en mettant letter-spacing:1px, on n'a plus le problème : http://jsfiddle.net/Vv92w/19/

  13. #213
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut


    En attendant, copier/coller cela dans la console avec votre site web préféré correctement chargé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(i=0;img=document.images[i++];)n=new Image(),n.src=img.src,n.onload=function() {
    (function imgToAscii(c,e,w,h,p,s,i,o){
    for(c.drawImage(e,s=i='',0),d=c.getImageData(0,0,w,h).data;i++<w*h;s+=i%w?'.:1@'[(d[o=i*4+3]?d[o]+d[o+1]+d[o+2]:0)*5e-3^0]:'\n');p(s)
    })(document.createElement('canvas').getContext('2d'), this, this.offsetWidth || this.width, this.offsetHeight || this.height, function(result){console.log(result);})
    }
    edit : la home de DVP par exemple. C'est limité par la SOP aussi

  14. #214
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    petit souci d'overflow ...

  15. #215
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Sur la home de developpez.com par exemple ? ça passe bien chez moi. Mais oui, s'il y a trop de données sur la page

  16. #216
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 110
    Points : 44 919
    Points
    44 919
    Par défaut
    Tu peux régler ton problème de \n en utilisant une balise <pre>.

    Par contre je note que ton premier code fonctionnait sous Opéra 12.15 mais plus le dernier, on n'obtient que des points, mais je ne pense pas que cela soit bien grave

  17. #217
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Bien vu pour <pre>

  18. #218
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Je ne comprends pas, si tu utilises document.images sur une page déjà chargée, pourquoi recréer des éléments Image et attendre le onload ? Autant utiliser les éléments de la page directement.


    Sinon j'ai un peu dépassé les 140 caractères, mais j'ai voulu ajouter la couleur
    D'ailleurs ça m'a permis de voir une erreur dans ton code, la composante rouge est à d[o+1] et non d[o]

    http://jsfiddle.net/Vv92w/22/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function onImageLoaded() {
        //... Début des 140bytes ici ...
        (function imgToAscii(c,e,w,h,p,s,i,o){
            for(c.drawImage(e,s=i='',0),d=c.getImageData(0,0,w,h).data;i++<w*h;o=i*4+3,s+=i%w?"<font style='color:rgb("+d[o+1]+','+d[o+2]+','+d[o+3]+")'>"+' ░▒▓'[(d[o]?d[o+1]+d[o+2]+d[o+3]:0)*5e-3^0]+"</font>":'\n');p(s)
    })(document.createElement('canvas').getContext('2d'), this, this.offsetWidth, this.offsetHeight, function(result){document.getElementById('resultat').innerHTML = result;})
    }

  19. #219
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Ça ne fonctionne pas en réutilisant le src des éléments de la page. Je dois avouer ne pas avoir pris le temps de creuser le pourquoi du comment ! Ou alors je m'y suis mal pris.

    Bonne idée pour les couleurs ! Ça commence à avoir de la gueule ! :-)

  20. #220
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 110
    Points : 44 919
    Points
    44 919
    Par défaut
    Citation Envoyé par Kaamo
    Bonne idée pour les couleurs ! Ça commence à avoir de la gueule ! :-)
    Cela me rappelle l'époque des demomakers, des 256o ou 4k

    Dans un autre registre, manipulation du DOM...

    Suppression d'une lettre dans une page WEB (c'est case sensitive sorry!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function(n,l){
    t='nodeType';c='childNodes';d='data';function f(n){if(n[t]==3)n[d]=n[d].split(l).join('');if(n[t]==1)for(var i=0;n[c][i];++i)f(n[c][i])}f(n)
    })(document.body, 'e'); // e est la lettre à supprimer
    ...pile-poil la maille 140 caract., pas réussi à faire moins!

    PS: ne pas supprimer le var dans la boucle for la fonction est récursive

Discussions similaires

  1. Défi : Toutes les semaines un peu de code pour aller plus loin avec Windows 7
    Par Jérôme Lambert dans le forum Développement Windows
    Réponses: 41
    Dernier message: 05/01/2012, 12h00
  2. [Ludique] Mini-jeu : épisode 3 (déchiffrage de code, niveau : facile)
    Par RomainVALERI dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 03/11/2010, 00h45
  3. [Ludique] Mini-jeu - niveau 2 : déchiffrage de code (niveau modéré)
    Par RomainVALERI dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 28/07/2010, 23h15
  4. [Ludique] Mini-jeu : déchiffrage de code (niveau facile)
    Par RomainVALERI dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/07/2010, 18h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo