Convertir une photo en dithering Atkinson
(gazs.github.io)- 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
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...
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
Je viens justement de le signaler via une issue : https://github.com/gazs/canvas-atkinson-dither/issues/2
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...
https://github.com/gazs/canvas-atkinson-dither
Cela dit, il reste actif sur GitHub dans d’autres dépôts, donc il acceptera peut-être une pull request :)
[1]: https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorE...
Pourquoi pas le tramage Sierra ?
https://tannerhelland.com/2012/12/28/dithering-eleven-algori...
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
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-...
Ç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
Ç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 ?
Ç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