- โปรเจกต์นี้นำ Atkinson Dithering ซึ่งเป็น ฟิลเตอร์ Macintosh แบบ 1-bit คลาสสิก มาทำงานบนเว็บ
- แปลงภาพอินพุตเป็น ขาวดำโดยเทียบกับค่าสีเทา 50% แล้วกระจายค่าความต่างไปยังพิกเซลข้างเคียง
- ใช้เทคโนโลยีเบราว์เซอร์สมัยใหม่ เช่น Canvas, Drag & Drop, WebWorkers, FileReader
- ภาพที่แปลงแล้วสามารถ คลิกขวาเพื่อบันทึก ได้
- การลากภาพเพื่อบันทึกยัง ไม่รองรับเนื่องจากข้อจำกัดของเบราว์เซอร์
ความสำคัญและจุดเด่นของโปรเจกต์โอเพนซอร์ส
- Atkinson Dithering เป็น เอฟเฟกต์กราฟิก Macintosh แบบคลาสสิก ที่ใช้ใน Hyperdither และ HyperScan
- ช่วยแปลงข้อมูลสีของภาพที่ซับซ้อนให้เรียบง่ายในระดับพิกเซล จึงมีประโยชน์ต่อการสร้าง ภาพขาวดำขนาดเบา
- ด้วยการเป็น เว็บแอป จึงใช้งานได้ผ่านเบราว์เซอร์สมัยใหม่โดยไม่ต้องติดตั้งซอฟต์แวร์เพิ่มเติม
- ผ่าน WebWorkers จึงสามารถ รันแบบอะซิงโครนัสและปรับประสิทธิภาพ เมื่อต้องประมวลผลภาพขนาดใหญ่
- ด้วยโค้ดโอเพนซอร์ส จึง ขยายความสามารถและปรับแต่ง ได้ง่าย
ภาพรวมของอัลกอริทึม Atkinson Dithering
- แปลงแต่ละพิกเซลเป็นขาวดำโดย เปรียบเทียบกับค่าสีเทา 50%
- ค่าความต่างที่เกิดจากการแปลงจะถูก กระจายไปยังพิกเซลรอบข้าง 6 จุด ดังนี้
(X: พิกเซลปัจจุบัน, กระจายจุดละ 1/8)
- X 1/8 1/8
- 1/8 1/8 1/8
- 1/8
- วิธีนี้ทำให้เกิดเอฟเฟกต์ dithering กับทั้งภาพ
วิธีการทำงานและการใช้งาน
- นำเข้าภาพโดย ลากแล้ววาง ไฟล์ลงในเบราว์เซอร์ หรือเลือกไฟล์ผ่านฟังก์ชันเลือกไฟล์
- ใช้ Canvas API เพื่อแปลงและเรนเดอร์ภาพแบบเรียลไทม์
- ใช้ FileReader เพื่ออ่านข้อมูลภาพ
- ใช้ WebWorkers เพื่อประมวลผล dithering แบบ เบื้องหลัง
- ภาพที่แปลงแล้วสามารถบันทึกได้ด้วยการ คลิกขวา
(ด้วยข้อจำกัดของเบราว์เซอร์ จึงไม่สามารถลากภาพไปวางบนเดสก์ท็อปเพื่อบันทึกได้โดยตรง)
เทคโนโลยีที่ใช้และสภาพแวดล้อมที่รองรับ
- ใช้งาน API สมัยใหม่ของ HTML5 และ JavaScript อย่างเต็มที่
- ต้องใช้ เบราว์เซอร์สมัยใหม่ และบางฟีเจอร์อาจถูกจำกัดในเบราว์เซอร์รุ่นเก่า
สรุป
- มอบ เวอร์ชันเว็บของฟิลเตอร์ Atkinson Dithering ที่เรียบง่ายและใช้งานตรงไปตรงมา
- มีศักยภาพในการนำไปใช้ได้หลากหลายด้าน เช่น นักพัฒนากราฟิก งานอาร์ตเวิร์ก และการทำภาพให้มีขนาดเบา
1 ความคิดเห็น
ความคิดเห็นใน Hacker News
นี่ยังเป็นอัลกอริทึม dithering ขาวดำที่ผมชอบที่สุดอยู่ดี
ตอนมหาวิทยาลัยผมเคยต่อสแกนเนอร์แบบฟลัตเบดขาวดำเข้ากับ Mac แล้วสแกนภาพด้วยโปรแกรมแนว HyperCard stack เพื่อทำภาพขาวดำ
ผมสแกนภาพจากหนังสือคลิปอาร์ตที่ซื้อจากร้านหนังสือของมหาวิทยาลัยแบบง่าย ๆ แล้วเอาไปใช้เป็น "โลโก้" ของเกมแชร์แวร์บน Mac ที่เริ่มเขียนราวปี 1988
ตอนนั้นยังไม่รู้ว่าอัลกอริทึมของ Atkinson เจ๋งแค่ไหน แต่พอภายหลังได้ลองใช้อัลกอริทึม dithering อื่น ๆ ก็ถึงได้ตระหนักว่าวิธีกระจายค่าของโค้ดของ Bill นั้นยอดเยี่ยมจริง ๆ
ช่วงหลังมานี้ ผมอยากแปลงภาพหลายเฟสของดวงจันทร์ให้เป็นสไตล์ Atkinson สำหรับโปรเจ็กต์ปฏิทิน eInk เลยไปหาเว็บไซต์ที่เกี่ยวข้องแล้วแปลงภาพดวงจันทร์
ไม่ควรกดลิงก์ "as follows" ใน info dialog
เพราะไม่ได้อัปเดตมานาน ตอนนี้มันกลายเป็นลิงก์ NSFW (ไม่เหมาะเปิดดูในที่ทำงานหรือที่สาธารณะ) ไปแล้ว
งานทำชิ้นนี้ยอดเยี่ยมมาก
ตอนดาวน์โหลด ถ้าใส่ค่าให้กับแอตทริบิวต์ "download" ของ anchor ก็จะตั้งชื่อไฟล์เริ่มต้นพร้อมนามสกุล .png ได้ ทำให้ประสบการณ์ดาวน์โหลดดีขึ้นอีกนิด
อ้างอิง: เอกสาร HTMLAnchorElement.download
ขณะที่คอมมิตล่าสุดของคลังเก็บเครื่องมือ dithering นี้ดูเหมือนจะเป็นเดือนมีนาคม 2016
ผู้เขียนยังคงทำงานบน GitHub ในคลังเก็บอื่น ๆ อยู่ ดังนั้นก็น่าหวังว่าเขาน่าจะรับ pull request ได้
ลิงก์: คลังเก็บ GitHub ของ canvas-atkinson-dither
ผมเองก็กำลังทำโปรเจ็กต์หนึ่งอยู่ ที่ให้แปลงภาพหลายภาพเป็น MacPaint แล้วสร้างเป็น disk image ฟอร์แมต 400k MFS ได้
ลิงก์: โปรเจ็กต์ mfsjs
มันถูกปล่อยทิ้งไว้ใน home directory ของผมอยู่หลายเดือนเหมือนกัน แต่ล่าสุดผมใช้ Gemini Deep Research มาช่วยเติมเต็มไลบรารี
ยังแนบ Markdown ที่ LLM สร้างให้ไว้ด้วย เผื่อใครอยากนำไปทำซ้ำหรือปรับปรุงในภาษาอื่น
ถ้าอยากลองทำ Atkinson dithering ด้วย Python
ขอแนะนำโปรเจ็กต์ hyperdither
ทั้งตัว implementation ก็ดี และอินเทอร์เฟซก็ชวนให้นึกถึงวันเก่า ๆ
ช่วงนี้เว็บคอมโพเนนต์ Atkinson dithering[0] ของผมมีคนเข้าเพิ่มขึ้นจนผมสงสัยว่าเกิดอะไรขึ้น ที่แท้ก็มีข่าวเศร้าแบบนี้นี่เอง
ส่วนตัวผมรู้สึกว่า Atkinson dithering ให้ภาพที่สวยที่สุดบนจอที่คมมาก ๆ แบบ Mac ดั้งเดิม
มันมีความเท่และกลิ่นอายยุค 80s บางอย่าง เลยเอาไปใช้ในเกมที่ผมทำเมื่อปีที่แล้วด้วย
[0]: เว็บคอมโพเนนต์ Atkinson dithering แบบแม่นยำระดับพิกเซล
นี่คือเครื่องมือคล้าย ๆ กันที่ผมทำไว้เมื่อหลายปีก่อน
เครื่องมือ dithering ของ Beyond Loom
น่าสนใจที่ตัวเลือกขนาดอันหนึ่งเป็น 512x384 ทั้งที่ความละเอียดของ Mac ดั้งเดิมคือ 512x342
Mac ยุคแรก ๆ ใช้ความละเอียดหน้าจอ 512x342 จริง
ข้อมูลที่เกี่ยวข้อง: ความละเอียดของ Macintosh ดั้งเดิม
แก้ไข: พอกลับไปอ่านอีกที จริง ๆ แล้วคุณพูดถูก
รู้สึกว่าไม่น่าใช่เรื่องบังเอิญ
UI น่ารักดี และลิงก์ GitHub ของเดโมก็น่าดูด้วย
คลังเก็บ GitHub ของ canvas-atkinson-dither
นี่คือ Atkinson คนเดียวกับที่เสียชีวิตวันนี้หรือเปล่า? แล้วนี่เป็นโปรเจ็กต์เพื่อรำลึกถึงเขาไหม?
ก็พูดได้ประมาณนั้น
แต่คอมมิตแรกของคลังเก็บนี้มีมาตั้งแต่ 15 ปีก่อน จึงไม่ใช่งานที่เพิ่งรีบทำขึ้นหลังได้ยินข่าวล่าสุด
ใช่ อัลกอริทึมนี้ Atkinson เป็นคน "ประดิษฐ์" เอง
คุณใช้คำว่า "ค้นพบ" แต่คำว่า "ประดิษฐ์" น่าจะตรงกว่า