

<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>字體 &#8211; MaxCodeReview</title>
	<atom:link href="https://codereview.max-everyday.com/category/font/feed/" rel="self" type="application/rss+xml" />
	<link>https://codereview.max-everyday.com</link>
	<description>分享Max收集的小程式</description>
	<lastBuildDate>Mon, 19 Jan 2026 19:35:33 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://codereview.max-everyday.com/wp-content/uploads/2020/07/cropped-logo1_x512-32x32.jpg</url>
	<title>字體 &#8211; MaxCodeReview</title>
	<link>https://codereview.max-everyday.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>TTF 轉 WOFF2 工具</title>
		<link>https://codereview.max-everyday.com/ttf-to-woff2/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Mon, 19 Jan 2026 18:50:42 +0000</pubDate>
				<category><![CDATA[字體]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=2143</guid>

					<description><![CDATA[除了 FontForge 之外，目前市場上有 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>除了 FontForge 之外，目前市場上有許多更現代且易於使用的 TTF 轉 WOFF2 工具，分別適合網頁開發者、設計師或是有大量轉換需求的工程師。</p>



<h2 class="wp-block-heading">線上轉換工具</h2>



<p>如果你不想安裝軟體，且轉換數量不多，這幾個網站是首選。</p>



<ul class="wp-block-list">
<li>Fontsource Webfont Converter純瀏覽器處理，檔案不會上傳到伺服器，對隱私更有保障，速度也非常快。</li>



<li>Transfonter這是目前開發者最推薦的工具。它除了轉換格式，還能幫你生成 @font-face 的 CSS 代碼，並支援字體子集化（Subsetting）來縮減檔案體積。</li>



<li>CloudConvert萬用型的檔案轉換器，如果你的字體檔案非常大（超過 10MB），一般的網頁工具可能會失敗，這時可以用 CloudConvert 處理。</li>
</ul>



<h2 class="wp-block-heading">命令列工具 (CLI)</h2>



<p>如果你需要批次處理，或是想把轉換流程加入自動化腳本，這幾個工具非常強大。</p>



<ul class="wp-block-list">
<li>google/woff2這是 Google 官方釋出的參考代碼。在 macOS 可以直接用 brew install woff2 安裝，之後在終端機輸入 <br>woff2_compress yourfont.ttf <br>就能得到 WOFF2 檔。</li>



<li>fonttools (Python)這是字體工程領域的標準工具。安裝 Python 後執行 <br>pip install fonttools<br>轉換指令：<br>pyftsubset yourfont.ttf &#8220;*&#8221; &#8211;flavor=woff2 &#8211;output-file=yourfont.woff2</li>



<li>wawoff2 (Node.js)這是 Google woff2 的 WebAssembly 版本，適合 Node.js 環境。執行 <br>npx wawoff2 compress yourfont.ttf</li>
</ul>



<h2 class="wp-block-heading">工具對比總結</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>工具類型</strong></td><td><strong>推薦名稱</strong></td><td><strong>優點</strong></td><td><strong>缺點</strong></td></tr></thead><tbody><tr><td>線上網頁</td><td>Transfonter</td><td>功能最全，可生成 CSS</td><td>有檔案大小限制</td></tr><tr><td>線上網頁</td><td>Fontsource</td><td>本地瀏覽器運算，隱私好</td><td>功能較單一</td></tr><tr><td>命令列 (C++)</td><td>woff2 (Google)</td><td>速度最快，官方標準</td><td>需手動編譯或安裝環境</td></tr><tr><td>命令列 (Python)</td><td>fonttools</td><td>功能最強大，支援子集化</td><td>學習曲線較高</td></tr></tbody></table></figure>



<p>如果你只需要簡單轉檔給網站用，我建議直接用 Transfonter。如果你是想研究如何縮小字體體積，那麼 fonttools 是比較專業的選擇。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">使用 Python 進行自動化轉換</h2>



<p>如果你的電腦有安裝 Python，使用 fonttools 是最專業的做法。它不只能轉檔，還能移除字體中用不到的字元來減肥。</p>



<p>首先安裝必要的套件：</p>



<pre class="wp-block-code"><code>pip install fonttools brotli
</code></pre>



<p>接著你可以使用這段簡單的腳本，它會掃描資料夾內所有的 TTF 檔案並轉換成 WOFF2：</p>



<pre class="wp-block-code"><code>import os
from fontTools.ttLib import TTFont

def convert_to_woff2():
    for file in os.listdir('.'):
        if file.endswith('.ttf'):
            font = TTFont(file)
            output_name = file.replace('.ttf', '.woff2')
            font.save(output_name, reorderTables=True)
            print(f'已完成: {output_name}')

if __name__ == '__main__':
    convert_to_woff2()
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">使用 Shell 指令批次轉換</h2>



<p>如果你在 macOS 或 Linux 環境，且已經安裝 Google 官方的 woff2 工具，可以用一行指令處理整個資料夾。</p>



<p>安裝方式：</p>



<pre class="wp-block-code"><code>brew install woff2
</code></pre>



<p>轉換指令：</p>



<pre class="wp-block-code"><code>for f in *.ttf; do woff2_compress "$f"; done
</code></pre>



<p>這會直接在同個資料夾產生對應的 WOFF2 檔案。這個工具的壓縮率通常是最好的，因為它使用了 Google 開發的 Brotli 壓縮演算法。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>pyftsubset 是 fonttools 套件中最強大的工具。它的核心邏輯是從原始字體中「切出」你需要的部分，並重新打包成網頁專用的格式。</p>



<h3 class="wp-block-heading">基礎轉換指令</h3>



<p>如果你不需要刪除任何字元，只是單純想把 TTF 轉成 WOFF2，可以使用這個指令。</p>



<p>Bash</p>



<pre class="wp-block-code"><code>pyftsubset input.ttf --glyphs="*" --flavor=woff2 --output-file=output.woff2
</code></pre>



<ul class="wp-block-list">
<li><code>--glyphs="*"</code>：代表保留原字體中所有的字元，不進行刪減。</li>



<li><code>--flavor=woff2</code>：指定輸出格式為 WOFF2。如果不加這行，預設會輸出 TTF。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">字體子集化（縮減體積）</h3>



<p>中文字體動輒 10MB 以上，載入速度很慢。子集化可以讓你只保留網頁會用到的字。</p>



<ul class="wp-block-list">
<li>指定文字內容：如果你只想保留特定的字（例如「你好」），可以使用 &#8211;text。Bash<code>pyftsubset input.ttf --text="你好" --flavor=woff2</code></li>



<li>使用 Unicode 範圍：如果你想保留常用的中文字範圍，可以使用 &#8211;unicodes。Bash<code>pyftsubset input.ttf --unicodes="U+4E00-9FFF" --flavor=woff2</code></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">常用的進階參數</h3>



<p>為了讓網頁載入更順暢，建議加上以下參數優化字體結構。</p>



<ul class="wp-block-list">
<li>&#8211;layout-features=&#8221;*&#8221;預設情況下，子集化會刪除 OpenType 特性（如連字、垂直排版）。如果你需要保留這些功能，務必加上這個參數。</li>



<li>&#8211;no-hinting如果你不在意舊螢幕的清晰度，移除 Hinting 資訊可以再減少約 10% 到 20% 的檔案大小。</li>



<li>&#8211;desubroutinize針對 CJK（中日韓）字體，這可以解決某些瀏覽器在渲染子集化後的 CJK 字體時出現的異常。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">完整的專業指令推薦</h3>



<p>這是我最常建議的「高效能網頁字體」轉換公式：</p>



<pre class="wp-block-code"><code>pyftsubset MarukoGothic.ttf --unicodes="U+4E00-9FFF,U+0000-007F" --flavor=woff2 --layout-features="*" --output-file=font.woff2
</code></pre>



<p>這個指令會保留「基本拉丁字母」與「常用中文字範圍」，並維持所有的字體排版特性。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>針對你的需求，要把日文、英文以及常用標點符號都包進去，你需要組合多個 Unicode 區塊。</p>



<h3 class="wp-block-heading">推薦的 Unicode 範圍組合</h3>



<p>你可以將以下這段字串直接複製到 <code>--unicodes</code> 參數後。這包含了基本英文、常用符號、日文（平假名、片假名、漢字）以及中文字：</p>



<pre class="wp-block-code"><code>U+0000-007F,U+00A0-00FF,U+2000-206F,U+3000-303F,U+3040-309F,U+30A0-30FF,U+4E00-9FFF,U+FF00-FFEF
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">各區塊詳細說明</h3>



<p>下表拆解了這串代碼代表的意義，你可以根據需求增減：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>範圍 (Unicode Range)</strong></td><td><strong>內容說明</strong></td><td><strong>包含項目</strong></td></tr></thead><tbody><tr><td><strong>U+0000-007F</strong></td><td>基本拉丁字母</td><td>數字、大小寫英文字母、基礎半形標點</td></tr><tr><td><strong>U+00A0-00FF</strong></td><td>拉丁增補</td><td>西歐語言常用符號、貨幣符號</td></tr><tr><td><strong>U+2000-206F</strong></td><td>一般標點</td><td>特殊引號、破折號、點號</td></tr><tr><td><strong>U+3000-303F</strong></td><td>CJK 符號</td><td>全形空格、句號、括號、頓號</td></tr><tr><td><strong>U+3040-309F</strong></td><td>平假名</td><td>日文平假名、濁音符號</td></tr><tr><td><strong>U+30A0-30FF</strong></td><td>片假名</td><td>日文片假名、長音符號</td></tr><tr><td><strong>U+4E00-9FFF</strong></td><td>CJK 漢字</td><td>常用繁體、簡體、日文漢字</td></tr><tr><td><strong>U+FF00-FFEF</strong></td><td>半形/全形形式</td><td>全形英文字母、全形數字、常用符號</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">最終執行指令範例</h3>



<p>這是一個非常完整的轉換指令，適合處理像「丸子黑體」這類包含中日文的字體：</p>



<p>for macOS / Linux:</p>



<pre class="wp-block-code"><code>pyftsubset MarukoGothic.ttf \
--unicodes="U+0000-007F,U+00A0-00FF,U+2000-206F,U+3000-303F,U+3040-309F,U+30A0-30FF,U+4E00-9FFF,U+FF00-FFEF" \
--flavor=woff2 \
--layout-features="*" \
--output-file=MarukoGothic_optimized.woff2
</code></pre>



<p>for Windows:</p>



<pre class="wp-block-code"><code>pyftsubset MarukoGothic.ttf ^
--unicodes="U+0000-007F,U+00A0-00FF,U+2000-206F,U+3000-303F,U+3040-309F,U+30A0-30FF,U+4E00-9FFF,U+FF00-FFEF" ^
--flavor=woff2 ^
--layout-features="*" ^
--output-file=MarukoGothic_optimized.woff2</code></pre>



<h3 class="wp-block-heading">小提醒</h3>



<p>如果你發現某些特殊的避頭尾點號（如雙引號）沒出現，通常是因為它們落在 <code>U+2018-201D</code> 之間，上面的 <code>U+2000-206F</code> 已經完整覆蓋了。</p>



<p></p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>影像邊緣平滑與雜點清理</title>
		<link>https://codereview.max-everyday.com/smooth_sharp/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Fri, 26 Dec 2025 16:43:30 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[字體]]></category>
		<category><![CDATA[image]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=2059</guid>

					<description><![CDATA[處理影像遇到鋸齒。掃描圖檔常有雜點。這影響辨 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>處理影像遇到鋸齒。掃描圖檔常有雜點。這影響辨識準確。程式碼提供修復方案。利用骨架提取重建邊緣。搭配像素樣式比對清除雜訊。適合處理黑白文件或數位掃描圖。</p>



<p>Max腳本檔案下載：<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/smooth_sharp.py">https://github.com/max32002/MaxFontScripts/blob/master/smooth_sharp.py</a></p>



<p>這個版本與「<a href="https://codereview.max-everyday.com/smooth_pattern/">套用多重濾鏡，精確修復各種特定的筆畫瑕疵</a>」這篇文章的差異在線條較圓滑，優點是產生的字型檔案會較小，缺點是，風格也消失的很嚴重，例如：預期的勾筆，會變成一個轉角的彎。</p>



<p>由於是使用scikit會造成交叉處可能被凸出或凹陷。這部份，等有空再來解，目前算是開發（除錯）中的版本。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">環境準備與安裝</h2>



<p>使用前需要準備開發環境。確保安裝 opencv-python 套件。還有 numpy 與 scikit-image。這些工具提供影像處理核心運算。</p>



<pre class="wp-block-code"><code>pip install opencv-python numpy scikit-image
</code></pre>



<h2 class="wp-block-heading">核心功能邏輯</h2>



<p>核心功能分為兩個階段。第一階段是 smooth_sharp_edges 函式。它提取影像骨架。計算每個點到邊緣的距離值。利用超取樣重新繪製平滑圓點。最後縮放回原始尺寸。這種做法能有效去除毛邊。</p>



<p>第二階段是 apply_pattern_cleaning_fast。這部分針對微小像素樣式進行清理。程式自動比對特定區塊。若符合定義的雜點特徵。就替換為正確像素。</p>



<h2 class="wp-block-heading">使用範例與指令</h2>



<p>程式支援單一檔案。也支援資料夾批次處理。透過命令列執行。參數 input 指定來源。參數 output 指定存放位置。</p>



<p>範例指令：</p>



<pre class="wp-block-code"><code>python smooth_sharp.py --input ./raw_images --output ./cleaned_results
</code></pre>



<p>如果沒有指定輸出路徑。程式會自動在輸入目錄旁建立新資料夾。處理完成的圖片會轉為白底黑字存檔。</p>



<h2 class="wp-block-heading">自定義清理樣式</h2>



<p>可以在 get_patterns 函式內擴充。定義 p 陣列為瑕疵樣式。定義 r 陣列為修正後的結果。程式會自動執行四個方向旋轉比對。不需要手動撰寫旋轉邏輯。這對處理特定硬體產生的掃描雜訊非常有效。</p>



<p>這是實用的影像預處理工具。適合處理黑白文字。或是改善手繪線條品質。</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>套用多重濾鏡，精確修復各種特定的筆畫瑕疵</title>
		<link>https://codereview.max-everyday.com/smooth_pattern/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Fri, 26 Dec 2025 13:44:46 +0000</pubDate>
				<category><![CDATA[字體]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=2048</guid>

					<description><![CDATA[為了方便擴展，我將程式結構重組。現在你可以定 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="779" height="707" src="https://codereview.max-everyday.com/wp-content/uploads/2025/12/2025-12-26_07-55_k1.jpg?v=1766706943" alt="" class="wp-image-2049" srcset="https://codereview.max-everyday.com/wp-content/uploads/2025/12/2025-12-26_07-55_k1.jpg?v=1766706943 779w, https://codereview.max-everyday.com/wp-content/uploads/2025/12/2025-12-26_07-55_k1-230x209.jpg?v=1766706943 230w, https://codereview.max-everyday.com/wp-content/uploads/2025/12/2025-12-26_07-55_k1-350x318.jpg?v=1766706943 350w, https://codereview.max-everyday.com/wp-content/uploads/2025/12/2025-12-26_07-55_k1-480x436.jpg?v=1766706943 480w" sizes="(max-width: 779px) 100vw, 779px" /></figure>



<p>為了方便擴展，我將程式結構重組。現在你可以定義一個列表，裡面存放多組 <code>pattern</code> 與 <code>replacement</code> 的配對。程式會自動對每一組配對執行四個角度的旋轉掃描與替換。</p>



<p>Max腳本檔案下載：<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/smooth_pattern.py">https://github.com/max32002/MaxFontScripts/blob/master/smooth_pattern.py</a></p>



<p>這個版本與「<a href="https://codereview.max-everyday.com/smooth_sharp/">影像邊緣平滑與雜點清理</a>」文章的差異在：優點是風格也消失較少，缺點：產生的字型檔案會較大，且雜訊較多。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">為什麼需要這份程式碼</h2>



<p>手寫筆記掃描成電腦檔案。墨水常常會暈開。筆畫黏在一起。畫面看起來很髒。這份程式碼可以自動修復。它能把黏住的字跡分開。清理多餘的碎點。讓黑白文字變得清晰。</p>



<h2 class="wp-block-heading">準備環境</h2>



<p>這段程式使用 Python 語言。你需要安裝兩個工具套件。打開終端機或命令提示字元。輸入下方指令安裝。</p>



<pre class="wp-block-code"><code>pip install opencv-python numpy</code></pre>



<h2 class="wp-block-heading">如何操作腳本</h2>



<p>你可以處理單張圖片。也可以處理整個資料夾。指令非常簡單。打開終端機。移動到檔案所在目錄。</p>



<p>處理單張圖片的範例。</p>



<pre class="wp-block-code"><code>python smooth_pattern.py -i test.jpg -o result.jpg
</code></pre>



<p>處理整個資料夾的範例。</p>



<pre class="wp-block-code"><code>python clean.py -i ./my_notes
</code></pre>



<p>如果沒有指定 output 路徑。程式會自動建立一個加上 &#8220;_clean&#8221; 字樣的資料夾。</p>



<h2 class="wp-block-heading">程式處理邏輯</h2>



<p>這份工具包含幾個重要步驟。首先將圖片轉為二值化。也就是純黑與純白。接著執行減少暈染。利用形態學運算切斷微小的連結。這對分離筆畫很有效。</p>



<p>程式定義了一些特定的像素樣式。會自動比對並替換雜訊。最後進行平滑化處理。先將圖片放大再縮小。利用中值濾波去除鋸齒。讓邊緣看起來更自然。</p>



<h2 class="wp-block-heading">建議</h2>



<p>對於學習 OpenCV 的初學者。這是一個很好的練習案例。可以觀察不同矩陣運算對圖片的影響。</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>字體檔匯出為SVG向量檔格式</title>
		<link>https://codereview.max-everyday.com/export_ttf_to_svg/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Wed, 07 May 2025 04:56:35 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[字體]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=1967</guid>

					<description><![CDATA[這個腳本會遍歷字型中的所有字元，並將每個 g [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>這個腳本會遍歷字型中的所有字元，並將每個 glyph 存成單獨的 .svg 檔案</p>



<h2 class="wp-block-heading">為什麼要學這個？</h2>



<p>在字型設計、視覺化應用、深度學習資料蒐集等領域中，我們常需要將 <code>.ttf</code> 字型檔案中的每個字元提取出來，轉換成標準向量格式（例如 <code>.svg</code>）。這種需求常見於以下情境：</p>



<ul class="wp-block-list">
<li>🎨 <strong>圖文設計師</strong>：將字型的特定字元轉為向量圖，供 Illustrator 或 Figma 編輯。</li>



<li>🧠 <strong>機器學習研究者</strong>：建立字型風格遷移、手寫模仿等模型時，需要大量向量化字元資料。</li>



<li>💻 <strong>前端工程師</strong>：將文字轉為 SVG，用於自訂字型圖示或動畫字效。</li>



<li>✍️ <strong>字型設計師</strong>：觀察並微調每個 glyph 的 SVG 輪廓。</li>
</ul>



<p>而手動一個一個轉出 SVG 不僅耗時，也容易出錯。幸好，透過 <code>FontForge</code> 提供的 Python API，我們可以輕鬆完成這個任務。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>前置作業</p>



<p>使用前，需要先安裝FontForge。</p>



<p>FontForge執行檔下載：<br><a href="https://fontforge.org/en-US/">https://fontforge.org/en-US/</a></p>



<p>Max腳本檔案下載：<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/export_ttf_to_svg.py">https://github.com/max32002/MaxFontScripts/blob/master/export_ttf_to_svg.py</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">使用範例</h2>



<p>假設你有一個叫做 <code>NotoSansCJKtc-Regular.ttf</code> 的中文字型檔，你可以執行以下指令：</p>



<pre class="wp-block-preformatted"><code>python export_ttf_to_svg.py ./fonts/NotoSansCJKtc-Regular.ttf ./output_svg<br></code></pre>



<p>執行後，程式會：</p>



<ul class="wp-block-list">
<li>開啟指定字型檔</li>



<li>將每個字元轉為 <code>.svg</code> 格式</li>



<li>儲存在 <code>./output_svg/</code> 資料夾中，命名為 glyph unicode int 值</li>
</ul>



<p>你可以在瀏覽器或設計工具中檢視這些 SVG，確認每個字元都完整向量化。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">小結</h2>



<p>這個工具對於字型開發、字元資料集建立、視覺化工具客製化都有很大的幫助。透過簡單幾行 Python，你就可以自動化這個繁瑣的流程。</p>



<p>有一個特殊的情況, 需要手動地設定對應值到程式碼裡, 取得對應值是在下面這篇文章:<br><a href="https://codereview.max-everyday.com/get-font-chars/">https://codereview.max-everyday.com/get-font-chars/</a></p>



<p>之所以會有對應值, 是因為同一個字, 有多個異體字造成.</p>



<p>如果沒有產生正確的對應, 會造成某一個字碼會同時顯示二個字的 glyph.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">相關文章</h2>



<p>向量檔匯入字體檔<br><a href="https://codereview.max-everyday.com/import-svg-to-font/">https://codereview.max-everyday.com/import-svg-to-font/</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>移除字型檔中指定集合</title>
		<link>https://codereview.max-everyday.com/clear_glyph/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Sun, 06 Apr 2025 16:47:15 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[字體]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[FontForge]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=1945</guid>

					<description><![CDATA[Max腳本檔案下載：https://gith [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Max腳本檔案下載：<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/clear_glyph.py">https://github.com/max32002/MaxFontScripts/blob/master/clear_glyph.py</a></p>



<p><strong>使用方法:</strong></p>



<pre class="wp-block-code"><code>fontforge clear_glyph.py --input INPUT --output new-font.ttf --string STRING</code></pre>



<p><strong>參數說明：</strong></p>



<ul class="wp-block-list">
<li><code>--input</code> 輸入的來源字體專案目錄。</li>



<li><code>--output</code> 要處理的字體專案目錄或字型檔。</li>



<li><code>--string</code> 要取出的字串。預設值是空字串.</li>



<li><code>--file</code> 使用文字檔內的子串.</li>



<li><code>--skip_alt</code> 遇到有alt (lookup) 的字, 不刪除. 以避免錯誤: Lookup subtable contains unused glyph uni???? making the whole subtable invalid</li>
</ul>



<p><strong>執行結果：</strong></p>



<figure class="wp-block-image"><img decoding="async" width="1122" height="316" src="https://codereview.max-everyday.com/wp-content/uploads/2021/11/2025-01-25_13-14_5n.jpg?v=1737782096" alt="" class="wp-image-1728" srcset="https://codereview.max-everyday.com/wp-content/uploads/2021/11/2025-01-25_13-14_5n.jpg?v=1737782096 1122w, https://codereview.max-everyday.com/wp-content/uploads/2021/11/2025-01-25_13-14_5n-1000x282.jpg?v=1737782096 1000w, https://codereview.max-everyday.com/wp-content/uploads/2021/11/2025-01-25_13-14_5n-230x65.jpg?v=1737782096 230w, https://codereview.max-everyday.com/wp-content/uploads/2021/11/2025-01-25_13-14_5n-350x99.jpg?v=1737782096 350w, https://codereview.max-everyday.com/wp-content/uploads/2021/11/2025-01-25_13-14_5n-480x135.jpg?v=1737782096 480w" sizes="(max-width: 1122px) 100vw, 1122px" /></figure>



<p>說明：</p>



<ul class="wp-block-list">
<li>開啟 alpha-1.ttf</li>



<li>刪除字元 g</li>



<li>另存為 alpha-2.ttf</li>



<li>來源字型字元數: 8</li>



<li>被清除掉的字元數: 1, (代表: 另存完的字元數: 7)</li>



<li>這個範例可以直接對2個字型檔操作, 針對大型的字型檔, 效率非常顯著的提升很多.</li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>2個ttf字型檔的包含文字相減,另存為新字型檔</title>
		<link>https://codereview.max-everyday.com/font_delete_font/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Sun, 06 Apr 2025 16:42:47 +0000</pubDate>
				<category><![CDATA[字體]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[FontForge]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=1942</guid>

					<description><![CDATA[直接存取 .ttf 字型檔, 做2個字型的相 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>直接存取 .ttf 字型檔, 做2個字型的相減處理.</p>



<p>重要：刪除檔案前，請先一定要做要備份，因為會救不回來！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Max腳本檔案下載：<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/font_delete_font.py">https://github.com/max32002/MaxFontScripts/blob/master/font_delete_font.py</a></p>



<p><strong>使用方法:</strong></p>



<pre class="wp-block-code"><code>fontforge font_delete_font.py --input input_font --remove selecte_font --output new-font.ttf</code></pre>



<p><strong>參數說明：</strong></p>



<ul class="wp-block-list">
<li><code>--input</code> 輸入的來源字體專案目錄。</li>



<li><code>--remove</code> 要移除文字清單的字體專案目錄。</li>



<li><code>--output</code> 要處理的字體專案目錄或字型檔。</li>
</ul>



<p><strong>執行結果：</strong></p>



<figure class="wp-block-image"><img decoding="async" width="1205" height="358" src="https://codereview.max-everyday.com/wp-content/uploads/2021/11/2025-01-27_13-19_5o.jpg?v=1737955190" alt="" class="wp-image-1747" srcset="https://codereview.max-everyday.com/wp-content/uploads/2021/11/2025-01-27_13-19_5o.jpg?v=1737955190 1205w, https://codereview.max-everyday.com/wp-content/uploads/2021/11/2025-01-27_13-19_5o-1000x297.jpg?v=1737955190 1000w, https://codereview.max-everyday.com/wp-content/uploads/2021/11/2025-01-27_13-19_5o-230x68.jpg?v=1737955190 230w, https://codereview.max-everyday.com/wp-content/uploads/2021/11/2025-01-27_13-19_5o-350x104.jpg?v=1737955190 350w, https://codereview.max-everyday.com/wp-content/uploads/2021/11/2025-01-27_13-19_5o-480x143.jpg?v=1737955190 480w" sizes="(max-width: 1205px) 100vw, 1205px" /></figure>



<p>說明：</p>



<ul class="wp-block-list">
<li>開啟 1.sfdir, 當作來源字型.</li>



<li>開啟 2.sfdir, 列出所有的文字清單.</li>



<li>另存為 3.sfdir</li>



<li>被清除掉的字元數: 2, 在個案之中, 這2個字其實只有一個檔案, 使用了 alt 對映.</li>



<li>被清除掉的字元數: 1, 在個案之中, 來源字型 1.sfdir 只有2個字, 2.sfdir 是1個字, 但有使用 alt 對映.</li>



<li>這個範例可以直接對2個字型檔 .ttf 操作, 針對大型的字型檔, 效率非常顯著的提升很多.</li>



<li>也可以使用這個 script 來解決刪除不常用字, 讓字型減肥的效果, 參考:<br>從文字檔移除特定文字集合<br><a href="https://codereview.max-everyday.com/remove-selected-char/">https://codereview.max-everyday.com/remove-selected-char/</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>將圖片轉換為二進制灰度模式</title>
		<link>https://codereview.max-everyday.com/binary_images/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Mon, 31 Mar 2025 08:16:57 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[字體]]></category>
		<category><![CDATA[image]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=1933</guid>

					<description><![CDATA[字型最終的推論, 是用 binary 來決定 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>字型最終的推論, 是用 binary 來決定, 雖然圖片的color space 格式已經是灰階, 但是透過繪圖軟體修改時, 預設還在 gray, 編輯的結果並不是最終結果的 binary, 為避免肉眼的誤判, 每次存檔去變成 binary 又太浪費時間, 改用 script 來完成,就很方便, 又省時間.</p>



<h2 class="wp-block-heading">為什麼要學這個？</h2>



<p>將圖片轉換為二進制灰度模式在許多應用中都非常有用，例如：</p>



<ul class="wp-block-list">
<li><strong>文字辨識 (OCR)：</strong> 許多 OCR 引擎在處理二進制圖片時，效果更好。</li>



<li><strong>影像分析：</strong> 二進制圖片可以簡化影像分析，例如形狀檢測、邊緣檢測等。</li>



<li><strong>列印或顯示：</strong> 在某些情況下，二進制圖片更適合列印或在特定顯示器上顯示。</li>



<li><strong>壓縮：</strong> 二進制圖片通常比灰度或彩色圖片更小，有助於節省儲存空間。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">使用方法</h2>



<ul class="wp-block-list">
<li>Max腳本檔案下載：<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/binary_images.py">https://github.com/max32002/MaxFontScripts/blob/master/binary_images.py</a></li>
</ul>



<p>在終端機或命令提示字元中執行以下命令：</p>



<pre class="wp-block-code"><code>python binary_images.py &lt;輸入目錄> &#91;--output_dir &lt;輸出目錄>] &#91;--threshold &lt;閾值>] &#91;--antialiasing &lt;反鋸齒強度>]</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">參數說明</h2>



<ul class="wp-block-list">
<li><code>&lt;輸入目錄></code>：要轉換圖片的目錄路徑。</li>



<li><code>--output_dir &lt;輸出目錄></code>：轉換後圖片的輸出目錄路徑。如果未提供，則原始圖片將被覆蓋。</li>



<li><code>--threshold &lt;閾值></code>：二值化的閾值，預設值為 127。</li>



<li><code>--antialiasing &lt;反鋸齒強度></code>：反鋸齒處理的強度，預設值為 0（不套用）。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">使用範例</h2>



<ul class="wp-block-list">
<li><strong>範例 1：</strong> 將 <code>images</code> 目錄中的所有圖片轉換為二進制灰度模式，並覆蓋原始檔案：</li>
</ul>



<p><code>python binary_images.py images</code></p>



<ul class="wp-block-list">
<li><strong>範例 2：</strong> 將 <code>images</code> 目錄中的所有圖片轉換為二進制灰度模式，並將轉換後的圖片儲存到 <code>binary_gray_images</code> 目錄中：</li>
</ul>



<p><code>python binary_images.py images --output_dir binary_gray_images</code></p>



<ul class="wp-block-list">
<li><strong>範例 3：</strong> 將 <code>images</code> 目錄中的所有圖片轉換為二進制灰度模式，並使用閾值 150 進行二值化：</li>
</ul>



<p><code>python binary_images.py images --threshold 150</code></p>



<ul class="wp-block-list">
<li><strong>範例 4：</strong> 將 <code>images</code> 目錄中的所有圖片轉換為二進制灰度模式，並套用強度為 3 的反鋸齒處理：</li>
</ul>



<p><code>python binary_images.py images --antialiasing 3</code></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">注意事項</h2>



<ul class="wp-block-list">
<li>請確保已安裝 OpenCV 函式庫（<code>pip install opencv-python</code>）。</li>



<li>反鋸齒強度值越大，模糊效果越強，但同時也會導致圖片細節損失。</li>
</ul>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>裁剪左右對應的圖片</title>
		<link>https://codereview.max-everyday.com/crop_images/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Tue, 25 Mar 2025 05:16:41 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[字體]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[image]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=1920</guid>

					<description><![CDATA[透過 font_image_combiner [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>透過 <a href="https://codereview.max-everyday.com/font_image_combiner/">font_image_combiner.py</a> 做對應圖, 想取得對應圖修改過的半邊圖片, 就可以透過這一個腳本.</p>



<p><strong>為什麼要學這個？</strong></p>



<p>在許多影像處理應用中，我們經常需要處理左右對應的圖片，例如：</p>



<ul class="wp-block-list">
<li><strong>立體視覺：</strong> 透過左右兩張圖片，可以模擬人眼的立體視覺效果。</li>



<li><strong>影像拼接：</strong> 將左右兩張圖片拼接成一張全景圖。</li>



<li><strong>影像分析：</strong> 分別分析左右兩張圖片，以提取不同的特徵。</li>



<li><strong>資料預處理：</strong> 在機器學習或深度學習的影像相關任務中，有時需要對資料集裡的圖片做裁切，以符合模型訓練所需的格式。</li>
</ul>



<p>這個 Python 腳本可以幫助您快速、方便地裁剪左右對應的圖片，提高工作效率。</p>



<p><strong>使用方法</strong></p>



<ol class="wp-block-list">
<li><strong>安裝 Pillow 函式庫：</strong>
<ul class="wp-block-list">
<li>如果您的電腦尚未安裝 Pillow，請在終端機或命令提示字元中執行以下命令： Bash<br><code>pip install Pillow</code></li>
</ul>
</li>



<li><strong>儲存 Python 腳本：</strong>
<ul class="wp-block-list">
<li>Max腳本檔案下載：<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/crop_images.py">https://github.com/max32002/MaxFontScripts/blob/master/crop_images.py</a></li>
</ul>
</li>



<li><strong>執行 Python 腳本：</strong>
<ul class="wp-block-list">
<li>在終端機或命令提示字元中，使用以下命令執行腳本： Bash<br><code>python crop_images.py --input &lt;輸入目錄路徑> --output &lt;輸出目錄路徑> --reverse</code></li>



<li>將 <code>&lt;輸入目錄路徑></code> 替換為包含左右對應圖片的目錄路徑。</li>



<li>將 <code>&lt;輸出目錄路徑></code> 替換為您想要儲存裁剪後圖片的目錄路徑。如果省略 <code>--output</code>，則預設會使用 <code>cropped_images</code> 目錄。</li>



<li>如果想要裁剪右半邊的圖片，請加上 <code>--reverse</code> 選項。</li>
</ul>
</li>
</ol>



<p><strong>參數說明</strong></p>



<ul class="wp-block-list">
<li><code>--input</code>：
<ul class="wp-block-list">
<li>必要參數。</li>



<li>指定輸入圖片目錄的路徑。</li>
</ul>
</li>



<li><code>--output</code>：
<ul class="wp-block-list">
<li>選擇性參數。</li>



<li>指定輸出目錄的路徑。</li>



<li>預設值為 <code>cropped_images</code>。</li>
</ul>
</li>



<li><code>--reverse</code>：
<ul class="wp-block-list">
<li>選擇性參數。</li>



<li>如果指定此參數，則裁剪右半邊的圖片。</li>



<li>如果未指定此參數，則裁剪左半邊的圖片。</li>
</ul>
</li>
</ul>



<p><strong>使用範例</strong></p>



<p>假設您的圖片目錄為 <code>input_images</code>，其中包含以下兩個圖片檔案：</p>



<ul class="wp-block-list">
<li><code>left.jpg</code></li>



<li><code>right.jpg</code></li>
</ul>



<p>您想要將 <code>left.jpg</code> 的左半邊裁剪出來，並儲存到 <code>left_cropped</code> 目錄，您可以執行以下命令：</p>



<p>Bash</p>



<pre class="wp-block-code"><code>python crop_images.py --input input_images --output left_cropped
</code></pre>



<p>您想要將 <code>right.jpg</code> 的右半邊裁剪出來，並儲存到 <code>right_cropped</code> 目錄，您可以執行以下命令：</p>



<p>Bash</p>



<pre class="wp-block-code"><code>python crop_images.py --input input_images --output right_cropped --reverse
</code></pre>



<p>透過這些範例，您可以更了解如何使用此腳本來裁剪左右對應的圖片。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>生成字元圖像</title>
		<link>https://codereview.max-everyday.com/generate_glyphs/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Mon, 24 Mar 2025 14:03:07 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[字串處理]]></category>
		<category><![CDATA[字體]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[String]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=1916</guid>

					<description><![CDATA[好的，這是一篇關於使用 Python 腳本生 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>好的，這是一篇關於使用 Python 腳本生成字元圖像的教學文章：</p>



<p><strong>為什麼要學這個？</strong></p>



<p>在許多情況下，我們需要將字元轉換為圖像，例如：</p>



<ul class="wp-block-list">
<li><strong>生成字型圖集：</strong> 用於遊戲開發、網頁設計或圖形設計。</li>



<li><strong>建立訓練資料集：</strong> 用於機器學習中的字元辨識。</li>



<li><strong>產生藝術字體：</strong> 創造獨特的字體效果。</li>



<li><strong>驗證碼產生:</strong> 產生驗證碼圖片。</li>
</ul>



<p>這個 Python 腳本提供了一個方便的方法，可以根據指定的字型、大小和樣式，快速生成字元圖像。</p>



<p><strong>使用方法</strong></p>



<ul class="wp-block-list">
<li><strong>安裝 Python 和 opencv, freetype：</strong></li>
</ul>



<pre class="wp-block-code"><code>pip install opencv-python numpy freetype-py </code></pre>



<p>安裝 opencv 與 freetype 圖像處理庫。</p>



<ul class="wp-block-list">
<li><strong>準備字型檔案：</strong>
<ul class="wp-block-list">
<li>將您要使用的字型檔案（例如 <code>.ttf</code> 或 <code>.otf</code>）放在一個容易存取的位置。</li>
</ul>
</li>



<li><strong>執行腳本：</strong>
<ul class="wp-block-list">
<li>將腳本儲存為一個 <code>.py</code> 檔案（例如 <code>generate_glyphs.py</code>）。腳本傳送門:<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/generate_glyphs.py">https://github.com/max32002/MaxFontScripts/blob/master/<code>generate_glyphs</code>.py</a></li>



<li>在命令列或終端機中，使用 </li>
</ul>
</li>
</ul>



<pre class="wp-block-code"><code>python generate_glyphs.py &#91;參數] </code></pre>



<p></p>



<p><strong>參數說明</strong></p>



<ul class="wp-block-list">
<li><code>--keyword</code>：
<ul class="wp-block-list">
<li>要生成的字串。</li>



<li>預設值為空字串。</li>
</ul>
</li>



<li><code>--font</code>：
<ul class="wp-block-list">
<li>字型檔案的路徑。</li>



<li>必要參數。</li>
</ul>
</li>



<li><code>--font_size</code>：
<ul class="wp-block-list">
<li>字型大小。</li>



<li>預設值為 256。</li>
</ul>
</li>



<li><code>--canvas_size</code>：
<ul class="wp-block-list">
<li>圖布大小（邊長）。</li>



<li>預設值為 256。</li>
</ul>
</li>



<li><code>--output_dir</code>：
<ul class="wp-block-list">
<li>輸出目錄。</li>



<li>預設值為 <code>glyph_image</code>。</li>
</ul>
</li>



<li><code>--filename_rule</code>：
<ul class="wp-block-list">
<li>檔案名稱規則。</li>



<li>可選值：<code>seq</code>（序列號）、<code>char</code>（字元）、<code><strong>unicode_int</strong></code>（Unicode 整數）、<code>unicode_hex</code>（Unicode 十六進位）。</li>



<li>預設值為 <code><strong>unicode_int</strong></code>。</li>
</ul>
</li>



<li><code>-f</code> (也可以用 <code>--format</code> )：
<ul class="wp-block-list">
<li>副檔名</li>



<li>預設值為 <code>png</code>。</li>
</ul>
</li>



<li><code>--file</code>：
<ul class="wp-block-list">
<li>從文字檔案讀取字元。</li>



<li>可選參數。</li>
</ul>
</li>



<li><code>--x_offset</code>：
<ul class="wp-block-list">
<li>字型 X 軸偏移量，預設為 0。</li>
</ul>
</li>



<li><code>--y_offset</code>：
<ul class="wp-block-list">
<li>字型 Y 軸偏移量，預設為 0。</li>
</ul>
</li>



<li><code>--clear</code>：
<ul class="wp-block-list">
<li>清除輸出目錄中的所有檔案。</li>



<li>如果存在這個參數，在生成檔案前，會先清除 output_dir 內的所有檔案。</li>
</ul>
</li>
</ul>



<p><strong>使用範例</strong></p>



<ul class="wp-block-list">
<li><strong>生成包含 &#8220;Hello&#8221; 字串的字元圖像：</strong></li>
</ul>



<pre class="wp-block-code"><code>python generate_glyphs.py --font font.ttf --keyword "Hello"</code></pre>



<ul class="wp-block-list">
<li><strong>從文字檔案讀取字元並生成圖像：</strong></li>
</ul>



<pre class="wp-block-code"><code>python generate_glyphs.py --font font.ttf --file characters.txt</code></pre>



<ul class="wp-block-list">
<li><strong>使用序列號作為檔案名稱，並設定字型大小和圖布大小：</strong></li>
</ul>



<pre class="wp-block-code"><code>python generate_glyphs.py --font font.ttf --keyword "ABC" --filename_rule seq --font_size 128 --canvas_size 128</code></pre>



<ul class="wp-block-list">
<li><strong>在生成檔案前，先清除 output_dir 內的所有檔案。</strong></li>
</ul>



<pre class="wp-block-code"><code>python generate_glyphs.py --font font.ttf --keyword "ABC" --clear</code></pre>



<p><strong>注意事項</strong></p>



<ul class="wp-block-list">
<li>請確保您提供的字型檔案路徑是正確的。</li>



<li>您可以根據需要調整參數，以獲得所需的圖像效果。</li>



<li>使用 <code>--clear</code> 參數會刪除整個輸出目錄及其中的所有檔案，請謹慎使用。</li>



<li>如果輸出目錄不存在，<code>--clear</code> 參數不會有任何作用。</li>
</ul>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>比較字型差異</title>
		<link>https://codereview.max-everyday.com/compare_fonts/</link>
		
		<dc:creator><![CDATA[max-code-review-usr1]]></dc:creator>
		<pubDate>Sun, 23 Mar 2025 10:14:20 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[字串處理]]></category>
		<category><![CDATA[字體]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[String]]></category>
		<guid isPermaLink="false">https://codereview.max-everyday.com/?p=1891</guid>

					<description><![CDATA[這個 Python 腳本目的在比較兩個字型在 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>這個 Python 腳本目的在比較兩個字型在顯示文字上的差異，並將結果輸出到文件中。它透過逐個字元比較像素差異，計算出每個字元的差異百分比，以及所有字元的平均差異百分比。</p>



<p>如果想看對照圖的話，可以下 &#8211;save 參數,  如果只有要看比對結果, 會顯示在compare_result.txt 文字檔內。</p>



<h2 class="wp-block-heading">為什麼要學這個？</h2>



<p>在設計、排版或任何需要使用字型的領域中，字型的選擇至關重要。即使是看似相似的字型，也可能在細節上存在差異，進而影響整體視覺效果。透過這個 Python 腳本，您可以：</p>



<ul class="wp-block-list">
<li><strong>精準比較字型差異：</strong> 量化兩個字型在像素層級的差異，找出人眼難以察覺的細節。</li>



<li><strong>提升設計品質：</strong> 確保字型選擇符合設計需求，避免因字型差異導致的視覺不協調。</li>



<li><strong>字型開發與測試：</strong> 字型設計師可以利用此工具，測試字型微調後的差異。</li>



<li><strong>排版校對：</strong> 協助校對排版文件，確保字型使用一致。</li>



<li><strong>不同字集之間 glyph 共用的判斷：</strong> 那些字可以同時被用在 cjkjp / cjktc / cjksc 的依據。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">前置作業</h2>



<p>在使用此腳本之前，請確保您已完成以下準備工作：</p>



<ul class="wp-block-list">
<li><strong>安裝 Python 和 Pillow：</strong>
<ul class="wp-block-list">
<li>如果您的電腦尚未安裝 Python，請至 Python 官網下載並安裝。</li>



<li>在命令列或終端機中執行以下指令，安裝 Pillow 函式庫： Bash<br><code>pip install pillow</code></li>
</ul>
</li>



<li><strong>準備字型檔案：</strong>
<ul class="wp-block-list">
<li>將您要比較的兩個字型檔案（例如 <code>.ttf</code> 或 <code>.otf</code> 格式）放置在電腦中方便存取的位置。</li>
</ul>
</li>



<li><strong>準備文字檔案：</strong>
<ul class="wp-block-list">
<li>建立一個文字檔案（例如 <code>text.txt</code>），其中包含您要比較的文字。</li>
</ul>
</li>



<li><strong>Max腳本檔案下載：</strong><br><a href="https://github.com/max32002/MaxFontScripts/blob/master/compare_fonts.py">https://github.com/max32002/MaxFontScripts/blob/master/compare_fonts.py</a></li>
</ul>



<h2 class="wp-block-heading">腳本使用方式</h2>



<p> 在命令列或終端機中，使用以下指令執行腳本：</p>



<pre class="wp-block-code"><code>python compare_fonts.py --font1 &lt;font1_path&gt; --font2 &lt;font2_path&gt; --file &lt;text_file_path&gt; &#91;options]
</code></pre>



<ul class="wp-block-list">
<li><code>&lt;font1_path&gt;</code>：第一個字型檔案的路徑。</li>



<li><code>&lt;font2_path&gt;</code>：第二個字型檔案的路徑。</li>



<li><code>&lt;text_file_path&gt;</code>：文字檔案的路徑。</li>



<li><code>[options]</code>：可選參數。</li>
</ul>



<p><strong>參數說明</strong></p>



<ul class="wp-block-list">
<li><code>--font1 &lt;font1_path&gt;</code>：指定第一個字型檔案的路徑。</li>



<li><code>--font2 &lt;font2_path&gt;</code>：指定第二個字型檔案的路徑。</li>



<li><code>--file &lt;text_file_path&gt;</code>：指定包含要比較文字的文字檔案路徑。</li>



<li><code>--output_file &lt;output_file_path&gt;</code>：指定輸出結果的檔案路徑，預設為 <code>compare_result.txt</code>。</li>



<li><code>-s, --size &lt;font_size&gt;</code>：指定字型大小，預設為 64。</li>



<li><code>--font1_x_offset &lt;x_offset&gt;</code>：指定第一個字型 X 軸偏移量，預設為 0。</li>



<li><code>--font1_y_offset &lt;y_offset&gt;</code>：指定第一個字型 Y 軸偏移量，預設為 0。</li>



<li><code>--font2_x_offset &lt;x_offset&gt;</code>：指定第二個字型 X 軸偏移量，預設為 0。</li>



<li><code>--font2_y_offset &lt;y_offset&gt;</code>：指定第二個字型 Y 軸偏移量，預設為 0。</li>



<li><code>--save</code>：儲存左右對照圖。</li>



<li><code>--reverse</code>：反轉左右對照圖的左右位置。</li>



<li><code>--output_dir &lt;output_directory&gt;</code>：指定對照圖的輸出目錄，預設為 <code>comparison_images</code>。</li>
</ul>



<p><strong>4. 實際範例</strong></p>



<p>假設我們有兩個字型檔案 <code>Arial.ttf</code> 和 <code>Verdana.ttf</code>，以及一個包含文字 &#8220;Hello World&#8221; 的文字檔案 <code>text.txt</code>。我們想要比較這兩個字型在顯示 &#8220;Hello World&#8221; 時的差異。</p>



<ol class="wp-block-list">
<li><strong>準備檔案：</strong>
<ul class="wp-block-list">
<li>將 <code>Arial.ttf</code>、<code>Verdana.ttf</code> 和 <code>text.txt</code> 放置在同一目錄下。</li>
</ul>
</li>



<li><strong>執行腳本：</strong>
<ul class="wp-block-list">
<li>在命令列或終端機中，切換到包含這些檔案的目錄。</li>



<li>執行以下指令： Bash<code>python compare_fonts.py --font1 Arial.ttf --font2 Verdana.ttf --file text.txt</code></li>
</ul>
</li>



<li><strong>查看結果：</strong>
<ul class="wp-block-list">
<li>腳本執行完成後，將在同一目錄下生成一個名為 <code>compare_result.txt</code> 的檔案，其中包含詳細的字元差異百分比和平均差異百分比。</li>



<li>如果使用了 <code>--save</code> 參數，還會在 <code>comparison_images</code> 目錄下生成左右對照圖。</li>
</ul>
</li>
</ol>



<p><strong>5. 進階應用</strong></p>



<ul class="wp-block-list">
<li><strong>調整字型大小和偏移量：</strong> 使用 <code>-s</code>、<code>--font1_x_offset</code>、<code>--font1_y_offset</code>、<code>--font2_x_offset</code> 和 <code>--font2_y_offset</code> 參數，調整字型大小和偏移量，以更精確地比較字型差異。</li>



<li><strong>儲存對照圖：</strong> 使用 <code>--save</code> 參數，儲存左右對照圖，以便更直觀地比較字型差異。</li>



<li><strong>反轉對照圖：</strong> 使用 <code>--reverse</code> 參數，反轉左右對照圖的左右位置。</li>



<li><strong>指定輸出目錄：</strong> 使用 <code>--output_dir</code> 參數，指定對照圖的輸出目錄。</li>
</ul>



<p><strong>6. 注意事項</strong></p>



<ul class="wp-block-list">
<li>字型檔案的路徑必須正確。</li>



<li>文字檔案的編碼必須為 UTF-8。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>針對上面產出的文字檔, 接續處理是:</p>



<p>篩選文字檔中的差異百分比結果並輸出特定字元<br><a href="https://codereview.max-everyday.com/filter_results/">https://codereview.max-everyday.com/filter_results/</a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
