แปลงภาพถ่ายเป็น Atkinson dithering
(gazs.github.io)- เปลี่ยนภาพถ่ายให้เป็นสไตล์ ฟิลเตอร์ 1 บิต ของ Macintosh ยุคคลาสสิก พร้อมใช้เอฟเฟ็กต์ Atkinson dithering ด้วยพิกเซลขาวดำเท่านั้น
- แต่ละพิกเซลจะถูกกำหนดให้เป็นสีดำหรือสีขาวโดยอิงจากค่า สีเทา 50% และค่าความคลาดเคลื่อนจากการแปลงจะถูกกระจายไปยังพิกเซลรอบข้าง
- ค่าความคลาดเคลื่อนจะถูกแจกจ่ายไปยัง 6 ตำแหน่งรอบพิกเซลปัจจุบัน ตำแหน่งละ 1/8 เพื่อสร้างภาพขาวดำที่มีพื้นผิวเฉพาะตัว
- ภาพผลลัพธ์สามารถ คลิกขวาเพื่อบันทึก ได้ แต่ไม่สามารถลากไปบันทึกบนเดสก์ท็อปได้เนื่องจากข้อจำกัดของเบราว์เซอร์
- การพัฒนาใช้ Canvas, Drag and Drop events, WebWorkers, FileReader API และต้องใช้เบราว์เซอร์รุ่นใหม่
วิธีประมวลผล Atkinson dithering
- การพัฒนานี้จำลอง ฟิลเตอร์ 1 บิตของ Macintosh แบบคลาสสิก ที่ใช้ใน Hyperdither และ HyperScan
- ขั้นตอนการประมวลผลคือเปรียบเทียบแต่ละพิกเซลกับ สีเทา 50% แล้วแปลงเป็นสีดำหรือสีขาว
- ค่าความต่างระหว่างค่าอินพุตและเอาต์พุตที่เกิดขึ้นระหว่างการแปลงจะถูกกระจายไปยังพิกเซลรอบข้าง
- ตำแหน่ง 2 จุดทางขวาของพิกเซลปัจจุบัน X จุดละ 1/8
- ตำแหน่ง 3 จุดจากซ้ายในบรรทัดถัดไป จุดละ 1/8
- ตำแหน่ง 1 จุดทางซ้ายในบรรทัดถัดจากนั้น 1/8
การใช้งานเดโมและข้อกำหนดของเบราว์เซอร์
- ภาพที่เรนเดอร์แล้วสามารถ คลิกขวาเพื่อบันทึก ได้
- เนื่องจากข้อจำกัดของเบราว์เซอร์ จึงไม่สามารถ ลากภาพไปบันทึก ลงเดสก์ท็อปได้
- โค้ดใช้ Canvas, Drag and Drop events, WebWorkers, FileReader API
- ต้องใช้เบราว์เซอร์รุ่นใหม่เพื่อรัน
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
นี่ยังเป็น อัลกอริทึม dithering ขาวดำ ที่ผมชอบที่สุดอยู่ดี
ตอนเรียนมหาวิทยาลัยมีสแกนเนอร์แบบแท่นขาวดำที่ต่อกับ Mac และน่าจะสแกนภาพแล้วทำเป็นภาพขาวดำได้ผ่าน HyperCard stack
ตอนเริ่มทำเกมแชร์แวร์บน Mac ราวปี 1988 ผมก็สแกนคลิปอาร์ตจากหนังสือที่ซื้อจากร้านหนังสือมหาวิทยาลัยแบบเร็ว ๆ แล้วเอามาใช้เป็น “โลโก้”
ตอนนั้นยังไม่รู้ว่า อัลกอริทึม Atkinson ดีแค่ไหน แต่พอภายหลังลอง dither ด้วยอัลกอริทึมอื่น ก็เลยรู้ว่าการกระจายของโค้ดของ Bill ทำได้ดีมากแค่ไหน
ไม่นานมานี้ตอนทำโปรเจ็กต์ปฏิทิน eInk ผมอยากทำชุดภาพดวงจันทร์หลายข้างให้เป็นภาพสไตล์ “Atkinson” ก็เลยหาเว็บคล้าย ๆ ที่ลิงก์ไว้แล้วใช้ Atkinson dithering กับภาพดวงจันทร์ [1]
[1] ดูดวงจันทร์ในภาพหน้าจอ: https://github.com/EngineersNeedArt/SystemSix/blob/10f2332b5...
ในกล่องข้อมูลตรง “as follows” ไม่ควรกดจะดีกว่า
ดูเหมือนจะไม่ได้อัปเดตมาสักพักแล้ว และระหว่างนั้นลิงก์ก็กลายเป็น NSFW ไปแล้ว
เมื่อกี้ผมแจ้งเป็น issue ไว้แล้ว: https://github.com/gazs/canvas-atkinson-dither/issues/2
งานทำออกมาเยี่ยมมาก และน่าจะดีขึ้นอีกนิดถ้าส่งค่าให้ download property ของ anchor เพื่อกำหนดชื่อไฟล์เริ่มต้นพร้อมนามสกุล .png ให้ไฟล์ที่ดาวน์โหลด
อ้างอิง: https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorE...
https://github.com/gazs/canvas-atkinson-dither
ถึงอย่างนั้นในคลังอื่นเขาก็ยัง active บน GitHub อยู่เรื่อย ๆ เลยอาจจะรับ pull request ก็ได้ :)
[1]: https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorE...
ทำไมไม่เป็น Sierra dithering ล่ะ?
https://tannerhelland.com/2012/12/28/dithering-eleven-algori...
ผมกำลังค่อย ๆ ทำสิ่งที่จะช่วยแปลงภาพหลายภาพเป็น MacPaint แล้วใส่ลงใน disk image ฟอร์แมต MFS ขนาด 400k ได้
https://github.com/minorbug/mfsjs
โปรเจ็กต์นี้นอนเก็บฝุ่นอยู่ในโฮมไดเรกทอรีมาหลายเดือนแล้ว
ผมใช้ Gemini Deep Research ช่วยทำไลบรารี และใส่ Markdown ที่ LLM สร้างไว้ด้วย เผื่อใครอยากนำไปทำซ้ำหรือปรับปรุงในภาษาอื่น
ใน Wikipedia ก็เขียนแบบนั้นเหมือนกัน แต่ไม่มีแหล่งอ้างอิง
งานทำชิ้นนี้ดีมาก และหน้าตาก็ชวนให้นึกถึงวันเก่า ๆ
วันนี้ผมยังสงสัยอยู่เลยว่าทำไม web component สำหรับ Atkinson dithering[0] ของผมถึงมียอดเข้าชมเพิ่มขึ้น ที่แท้ก็เพราะข่าวเศร้านี่เอง
ผมคิดมาตลอดว่าบนจอที่คมมากแบบ Mac ดั้งเดิม Atkinson dithering ให้ภาพที่ดูดีที่สุด
มันมีอะไรบางอย่างที่เท่และให้บรรยากาศยุค 80 มาก ๆ ผมเลยเอาไปใช้ในเกมเมื่อปีที่แล้วด้วย
[0] https://sheep.horse/2023/1/improved_web_component_for_pixel-...
กับภาพบางภาพสไตล์นี้เข้ากันได้ดีมาก แต่บางภาพก็ไม่ค่อย
มันให้ความรู้สึกย้อนยุคแบบสมัยใหม่อย่างแปลก ๆ และจุดแต่ละจุดก็ไม่ได้รบกวนสายตาแบบภาพถ่ายเก่าจริง ๆ
ถ้าอยากลองทำใน Python ก็มี hyperdither
https://github.com/tgray/hyperdither
น่าจะเหมาะมากกับอุปกรณ์ eInk/ePaper
Atkinson คนนี้คือคนเดียวกับ Atkinson ที่เสียชีวิตวันนี้ใช่ไหม แล้วนี่เป็นการไว้อาลัยหรือเปล่า?
ก็น่าจะเป็นการไว้อาลัยจริง
แก้จาก “ค้นพบ” เป็น “คิดค้น” ดูอ้างอิงด้านล่าง
ผมอยากเรียนรู้อัลกอริทึมนี้ให้มากขึ้นอีกหน่อย เลยทำ https://atkinson.franzai.com/ ขึ้นมา
ผมเช็กซ้ำกับ AI หลายตัวแล้ว ก็หวังว่าข้อเท็จจริงจะถูกต้อง