2014-02-15 49 views
0

我正在使用PowerShell腳本來批量繪製字符(有點像flashcards)的圖像。.net繪製文字不帶輪廓(具體爲平假名)

而我遇到了一個我以前見過的問題,那就是字符看起來很髒。例如:

enter image description here

大字符看起來不錯,但我相信這只是因爲它的規模。如果我放大右邊的文字,它看起來也很好。但我希望文本的大小。

我已經使用了以下兩種方法來嘗試和清理文本,沒有效果:

$grph.SmoothingMode.value__ClearTypeGridFit 

另一種方法,我已經使用:

$grph.CompositingQuality = [System.Drawing.Drawing2D.CompositingQuality]::HighQuality 
$grph.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic 
$grph.SmoothingMode = [System.Drawing.Drawing2D.SmoothingMode]::AntiAlias 

我相信這是更來自cleartype字體的工件而不是代碼問題,但我正在尋求幫助。

完整的腳本:

  • 讀CSV文件(支持UTF-8感謝的LibreOffice)
  • 對於CSV每一行,創建圖像。這是創建圖像的Foreach語句。
 
$List | ForEach-Object { 
$Name = $_.Name 
$Out = "$Path\$Name.png" 

$imgWidth = 270 
$imgHeight = 450 
$img = New-Object System.Drawing.Bitmap $imgWidth, $imgHeight 
$fontK = New-Object System.Drawing.Font "Meiryo", 85 

$FontAll = New-Object System.Drawing.Font Meiryo, 35 

$BrushBG = [System.Drawing.Brushes]::Transparent 
$BrushFG = [System.Drawing.Brushes]::Lime 

$grph = [System.Drawing.Graphics]::FromImage($img) 

$grph.CompositingQuality = [System.Drawing.Drawing2D.CompositingQuality]::HighQuality 
$grph.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic 
$grph.SmoothingMode = [System.Drawing.Drawing2D.SmoothingMode]::AntiAlias 

$grph.FillRectangle($BrushBG,0,0,$img.Width,$img.Height) 

$kanji = $_.kanji 
$grph.DrawString([String]$kanji, [System.Drawing.Font]$fontK, $BrushFG, [int]0,[int]0) 

$kun = $_.kunyomi 
$fontOn = New-Object System.Drawing.Font "Meiryo", 36 
$kunWidth = [System.Windows.Forms.TextRenderer]::MeasureText($kun, $fontOn) 
$kunLeft = $imgWidth - $kunWidth.Width 
$grph.DrawString([String]$kun, [System.Drawing.Font]$fontOn, $BrushFG, [int]$kunLeft,[int]0) 

$pKun = $_.pronounceKun 
$pKunSize = [System.Windows.Forms.TextRenderer]::MeasureText($pKun, $fontOn) 
$pKunLeft = $imgWidth - $pKunSize.Width 
$grph.DrawString([String]$pKun, [System.Drawing.Font]$fontOn, $BrushFG, $pKunLeft,$kunWidth.Height) 

$grph.Dispose() 
$img.Save($Out) 

Write-Output $Name, $ony 
} 

我除去未示出的圖像的部分的代碼,但它基本上是複製代碼。

如何讓平假名ひ和「嗨」沒有黑色的鋸齒輪廓?

回答

2

我發現我需要做的。

我需要使用System.Drawing.Text.TextRenderingHint來增加我想要的清晰度。

我玩刪除其他採樣/別名信息,它出現與它我保持一個稍好的圖像。

質量現在該代碼:

$grph = [System.Drawing.Graphics]::FromImage($img) 

$grph.CompositingQuality = [System.Drawing.Drawing2D.CompositingQuality]::HighQuality 
$grph.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic 
$grph.SmoothingMode = [System.Drawing.Drawing2D.SmoothingMode]::AntiAlias 
$grph.TextRenderingHint = [System.Drawing.Text.TextRenderingHint]::AntiAlias 

和輸出的樣子:

enter image description here