.Net绘制没有轮廓的文本(特别是平假名)

时间:2014-02-15 16:53:05

标签: .net powershell fonts image-generation

我正在开发一个PowerShell脚本来批量制作角色图像(有点像抽认卡)。

我遇到了一个我以前见过的问题,那个角色看起来很脏。例如:

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文件(LibreOffice支持UTF-8)
  • 对于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
}

我删除了未显示图像部分的代码,但它基本上是重复的代码。

怎样才能使平假名ひ和“hi”没有黑色的锯齿状轮廓?

1 个答案:

答案 0 :(得分: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