Theppitak's blog

My personal blog.

06 พฤษภาคม 2552

More on Font Synthesizing

เดือนก่อน blog ไว้เรื่อง การปรับกฎการสังเคราะห์ฟอนต์ วันนี้มี update เพิ่มเติม

ครั้งก่อนนั้น ได้ปรับกฎเพื่อแก้ปัญหาการย่อขนาดฟอนต์ที่ไปกระทบถึงฟอนต์อื่น ๆ ที่ถูกเลือกพร้อมกันใน stylesheet แล้ว ปรากฏว่าระหว่างทดสอบฟอนต์กับเว็บต่าง ๆ ก็พบว่ากฎนี้ยังคงมีปัญหา เป็นปัญหาการย่อขนาดฟอนต์ที่ต้องการย่อเอง โดยฟอนต์ที่ได้ มีขนาดเล็กมาก หลังจากทดลองเทียบขนาดต่าง ๆ ก็สรุปได้ว่า มีการคูณเมทริกซ์สำหรับย่อสองครั้ง ทำให้ฟอนต์หดลงเป็นอัตรากำลังสอง!

ผมตรวจดูกฎแล้ว ยังหาที่ผิดไม่เจอ วิธีแก้ที่ทำได้ จึงมีสองแบบ:

  1. ถอดรากที่สองของอัตราย่อ เพื่อที่เมื่อมีการคูณสองครั้ง ก็จะได้อัตราย่อที่ต้องการ
  2. เปลี่ยนจากการคูณเมทริกซ์ที่มีอยู่แล้ว เป็นการกำหนดค่าเมทริกซ์ทับลงไปเลย

เช่น จากกฎแบบนี้:

  ...
  <edit name="matrix" mode="assign">
    <times>
      <name>matrix</name>
      <matrix>
        <double>0.67</double><double>0</double>
        <double>0</double><double>0.67</double>
      </matrix>
    </times>
  </edit>
  ...

วิธีแรกจะปรับเป็น:

  ...
  <edit name="matrix" mode="assign">
    <times>
      <name>matrix</name>
      <matrix>
        <double>0.8185</double><double>0</double>
        <double>0</double><double>0.8185</double>
      </matrix>
    </times>
  </edit>
  ...

ส่วนวิธีที่สองจะปรับเป็น:

  ...
  <edit name="matrix" mode="assign">
    <matrix>
      <double>0.67</double><double>0</double>
      <double>0</double><double>0.67</double>
    </matrix>
  </edit>
  ...

แน่นอนว่าทั้งสองวิธีมีความเสี่ยงทั้งนั้น วิธีถอดรากที่สอง เสี่ยงตรงที่เราถือว่ากฎจะผิดพลาดแบบเกิดการคูณสองครั้งเสมอ ถ้ารุ่นไหนของ fontconfig มีการปรับทำให้ไม่เกิดการคูณสองครั้ง เราก็ต้องมายกกำลังสองกลับคืน ส่วนวิธี assign เมทริกซ์ทับ ก็เสี่ยงกับการทับค่าของกฎอื่นที่อาจจะมีการกำหนดเมทริกซ์มาก่อนหน้าแล้ว

เนื่องจากยังไม่สามารถหาวิธีที่ดีที่สุด คือหาสาเหตุที่แท้จริงให้พบ ผมจึงตัดสินใจเลือกวิธีที่สองไปก่อน เนื่องจากวิธีนี้จะดู hack น้อยกว่า ไม่มีการปรับตัวเลข และเพื่อลดความเสี่ยงในการทับค่าเมทริกซ์ ผมจึงเลื่อนลำดับของกฎจากลำดับที่ 90 เป็น 89 เพื่อให้ทำก่อน 90-synthetic.conf ของ fontconfig ด้วย วิธีนี้ commit เข้า SVN ของ thaifonts-scalable แล้ว

ท่านใดสามารถชี้จุดผิดพลาดของกฎได้ ก็ยินดีครับ (ดูกฎเต็ม ๆ ได้ใน blog เก่า ขออนุญาตไม่ขยายซ้ำ)

ป้ายกำกับ: ,

0 ความเห็น:

แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)

<< กลับหน้าแรก

hacker emblem