1 points par GN⁺ 2025-06-08 | 1 commentaires | Partager sur WhatsApp
  • Transforme une photo dans le style du filtre 1 bit des Macintosh classiques, en appliquant un effet de dithering Atkinson uniquement avec des pixels noirs et blancs
  • Chaque pixel devient noir ou blanc en fonction d’un seuil de gris à 50 %, et l’erreur de conversion est diffusée vers les pixels voisins
  • L’erreur est répartie à 1/8 chacun sur 6 positions autour du pixel courant, créant une image noir et blanc à la texture caractéristique
  • L’image résultante peut être enregistrée par clic droit, mais ne peut pas être glissée sur le bureau pour l’enregistrer en raison des limitations du navigateur
  • L’implémentation utilise Canvas, les événements Drag and Drop, WebWorkers et l’API FileReader, et nécessite un navigateur récent

Méthode de traitement du dithering Atkinson

  • Cette implémentation reproduit le filtre 1 bit Macintosh classique utilisé dans Hyperdither et HyperScan
  • Le traitement consiste à comparer chaque pixel à un gris à 50 % pour le convertir en noir ou en blanc
  • La différence entre la valeur d’entrée et la valeur de sortie générée lors de la conversion est répartie sur les pixels voisins
    • 1/8 sur chacune des 2 positions à droite du pixel courant X
    • 1/8 sur chacune des 3 positions de la ligne suivante, en partant de la gauche
    • 1/8 sur 1 position à gauche de la ligne d’après

Utilisation de la démo et exigences du navigateur

  • L’image rendue peut être enregistrée par clic droit
  • En raison des limitations du navigateur, il n’est pas possible de l’enregistrer en la faisant glisser sur le bureau
  • Le code utilise Canvas, les événements Drag and Drop, les WebWorkers et l’API FileReader
  • Un navigateur récent est nécessaire pour l’exécuter

1 commentaires

 
GN⁺ 2025-06-08
Commentaires Hacker News
  • Ça reste toujours mon algorithme de tramage noir et blanc préféré
    À l’université, il y avait un scanner à plat noir et blanc connecté à un Mac, et on pouvait sans doute numériser des images et les convertir en noir et blanc avec une pile HyperCard
    Quand j’ai commencé à faire des jeux shareware pour Mac vers 1988, je numérisais rapidement des cliparts tirés d’un livre acheté à la librairie du campus pour m’en servir comme « logos »
    À l’époque, je ne réalisais pas à quel point l’algorithme d’Atkinson était bon, mais en essayant plus tard le tramage avec d’autres algorithmes, j’ai compris à quel point la diffusion dans le code de Bill était réussie
    Plus récemment, en réalisant un projet de calendrier eInk, j’ai voulu créer une série d’images « dans le style Atkinson » avec des photos de la Lune à différentes phases, alors j’ai trouvé un site similaire à celui en lien et j’y ai appliqué le tramage Atkinson à des photos de la Lune [1]
    [1] Référence de la Lune dans la capture d’écran : https://github.com/EngineersNeedArt/SystemSix/blob/10f2332b5...

    • Vraiment magnifique ! S’il existe un endroit où l’on peut voir le code de Bill, j’aimerais bien mettre les mains dedans pour apprendre
  • Mieux vaut ne pas cliquer sur « as follows » dans la boîte de dialogue d’information
    Le site a l’air de ne pas avoir été mis à jour depuis un moment, et entre-temps le lien est devenu NSFW

  • L’implémentation est excellente, et ce serait encore un peu mieux en passant une valeur à l’attribut download de l’ancre pour donner au fichier téléchargé un nom par défaut avec l’extension .png
    Référence : https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorE...

  • Pourquoi pas le tramage Sierra ?
    https://tannerhelland.com/2012/12/28/dithering-eleven-algori...

    • À l’origine, c’était surtout de la nostalgie pour les premiers Mac, et comme Bill Atkinson vient de disparaître, le sujet est sans doute revenu sur le devant de la scène
  • Je bricole par intermittence un outil qui permet de convertir plusieurs images en MacPaint et de les placer dans une image disque au format MFS de 400k
    https://github.com/minorbug/mfsjs
    Ce projet prend un peu la poussière dans mon home directory depuis des mois
    Je me suis fait aider par Gemini Deep Research pour créer la bibliothèque, et j’y ai aussi inclus du Markdown généré par un LLM pour les personnes qui voudraient le reproduire ou l’améliorer dans d’autres langages

    • Il est indiqué que « les images MacPaint sont un format fixe avec une résolution de 576 x 720 pixels » ; c’était vraiment un format fixe ?
      Wikipedia l’indique aussi, mais sans source
  • Cette implémentation est excellente, et l’interface fait remonter plein de souvenirs
    Je me demandais pourquoi mon web component de tramage Atkinson[0] recevait plus de vues aujourd’hui, et c’était à cause d’une triste nouvelle
    J’ai toujours pensé que sur des écrans très nets comme ceux des Mac d’origine, le tramage Atkinson produisait les images les plus agréables à regarder
    Il a quelque chose de cool et de très années 80, donc je l’ai utilisé dans un jeu l’an dernier
    [0] https://sheep.horse/2023/1/improved_web_component_for_pixel-...

    • Faire du tramage au pixel près sur un écran Retina, c’est assez singulier
      Ça fonctionne vraiment bien avec certaines photos, et moins avec d’autres
      Ça donne une étrange impression de rétro moderne, sans que les points individuels deviennent gênants comme sur de vraies vieilles photos
  • Si vous voulez essayer en Python, il y a hyperdither
    https://github.com/tgray/hyperdither

    • En faisant défiler la page, les images du README deviennent marron
  • Ça semblerait très bien convenir aux appareils eInk/ePaper

  • C’est bien le même Atkinson que celui qui est mort aujourd’hui, et c’est un hommage ?

    • Dans une certaine mesure oui, mais le premier commit du dépôt remonte à 15 ans, donc ce n’est pas quelque chose monté à la hâte pour coller à l’actualité
    • Oui, c’est bien lui qui a inventé cet algorithme
      Ça ressemble probablement à un hommage
      Correction : « inventé » et non « découvert ». Voir ci-dessous
  • J’ai créé https://atkinson.franzai.com/ parce que je voulais en apprendre un peu plus sur cet algorithme
    J’ai reverifié avec plusieurs IA, donc j’espère que les faits sont exacts