37 คะแนน โดย abcdkh1209 2026-02-18 | 7 ความคิดเห็น | แชร์ทาง WhatsApp

ทำไมถึงสร้างมันขึ้นมา?

เดิมทีผมใช้เครื่องมือชื่อ Squoosh ของ Google เป็นประจำ แต่เวอร์ชัน CLI พอรันแล้วเกิดข้อผิดพลาด ส่วนเวอร์ชันเว็บก็พอใช้ได้อยู่... ทว่าเพราะสภาพที่ถูกปล่อยทิ้งตามสไตล์ Google สุดท้ายเลยตัดสินใจทำขึ้นมาเอง ผมลองหาตัวทดแทนแล้ว แต่ก็ไม่เจออะไรที่ถูกใจ

slimg คืออะไร?

มันคือ CLI สำหรับปรับแต่งภาพที่เขียนด้วย Rust รองรับการแปลงระหว่าง JPEG, WebP, PNG, AVIF, QOI รวมถึงการย่อขนาดและการปรับคุณภาพให้เหมาะสม โดยใช้โคเดกสมัยใหม่อย่าง MozJPEG, OxiPNG, ravif

ผลลัพธ์จากการใช้งานจริง:

ผมทำการปรับแต่งรูปภาพส่วนตัวขนาด 54GB แบบเป็นชุด แล้วลดลงเหลือ 8GB (ลดลง 85%) โดยคุณภาพอยู่ในระดับที่แทบมองไม่เห็นความแตกต่างด้วยตาเปล่า

# ประมวลผลทั้งไดเรกทอรีแบบเป็นชุด (ขนาน)  
slimg convert ./photos --format webp --quality 85 --recursive  
  
# ย่อขนาด + แปลงไฟล์  
slimg resize photo.jpg --width 800 --format avif --quality 70  

จุดเด่นทางเทคนิค:

  • ประมวลผลแบบขนานทุกคอร์ของ CPU ด้วย Rayon
  • ใช้ไฟล์ชั่วคราว → atomic rename เพื่อ overwrite อย่างปลอดภัย
  • แยกไลบรารี (slimg-core) ออกจาก CLI (นำกลับไปใช้ซ้ำได้)
  • ประสิทธิภาพระดับเนทีฟด้วย C codec bindings

การติดตั้ง:

brew install clroot/tap/slimg  
# https://github.com/clroot/slimg/releases  

GitHub: https://github.com/clroot/slimg

7 ความคิดเห็น

 
abcdkh1209 2026-02-18

มีการเพิ่ม Kotlin binding ของ slimg แล้ว ทำให้สามารถประมวลผลรูปภาพบนเซิร์ฟเวอร์/แบ็กเอนด์ได้อย่างง่ายดาย

 
rainystar 2026-02-23

ผมก็เคยใช้ LLM ทำสิ่งที่ลบพื้นหลังจากไฟล์ที่สร้างเป็น PNG แล้วแปลงเป็น SVG โดยลดขนาดไฟล์ลงพร้อมรักษาคุณภาพไว้เหมือนกันครับ ทำด้วย Rust และส่วนการแปลงเป็น SVG ก็ทำได้ดีมาก แต่ถ้าจะลดขนาดไฟล์ใน SVG ก็หลีกเลี่ยงไม่ได้ที่จะต้องใช้โปรแกรมชื่อ svgo svgo มีความสามารถยอดเยี่ยมในการตัดโค้ดที่ไม่จำเป็นออกจาก SVG แต่ผมรู้สึกว่าส่วนนี้เป็นเรื่องที่ต้องมีความรู้เฉพาะทางอยู่พอสมควร เลยใช้งาน svgo มาโดยตลอด
แต่ผมไม่เคยนึกถึงการใช้โคเด็กรุ่นใหม่อย่าง MozJPEG, OxiPNG, ravif มาก่อนเลยครับ ตอนนี้ก็เลยอยากลองทำดูบ้างแล้ว ขอบคุณสำหรับแรงบันดาลใจครับ

 
secret3056 2026-02-20

ก่อนหน้านี้ผมใช้ SalOne22/rimage อยู่ น่าจะต้องลองดูว่าอันนี้เป็นอย่างไรบ้าง อย่างน้อยการมี Python binding ให้ก็ดูเป็นข้อดีครับ

 
abcdkh1209 2026-02-19

มีการเพิ่ม Python binding ของ slimg แล้ว

 
click 2026-02-18

ผมเองก็ทำเครื่องมือด้วย Rust สำหรับแปลงรูปภาพที่ถูกรวมอยู่ในไฟล์บีบอัดแบบเป็นชุดแล้วใช้อยู่เหมือนกัน คงต้องลองเปลี่ยนการเรียกใช้ภายในมาเป็นรีโพซิทอรีนี้ดูครับ
ไม่ทราบว่าที่การถอดรหัส avif ใช้ได้เฉพาะบน macOS นั้น มีเหตุผลเฉพาะอะไรหรือเปล่าครับ?

 
abcdkh1209 2026-02-18

ตอนนี้หากคุณใช้เวอร์ชัน 0.1.3 ก็จะสามารถถอดรหัส avif ได้บน Windows และ Linux ด้วย

 
abcdkh1209 2026-02-18

เป็นเพราะเวอร์ชันของไลบรารีที่ใช้จัดการ avif ในสภาพแวดล้อม GitHub Actions ที่ใช้สำหรับการบิลด์เข้ากันไม่ได้ ทางเรามีแผนจะปรับแก้สภาพแวดล้อมการบิลด์ในเร็ว ๆ นี้ เพื่อให้รองรับ avif บนเครื่อง Linux ได้ด้วย