2015-11-04 90 views
1

我試圖以編程方式向圖像添加一些文本,稍後我將其保存。但最終結果有點不令人信服。以編程方式向圖像添加文本看起來模糊

圖像上的文字看起來很模糊。

我用它來渲染片斷如下:

static void ModifyImage() 
{ 
    Image origImage; 
    if (File.Exists(path)) 
    { 
     using (Stream s = new FileStream(path, FileMode.Open, FileAccess.Read)) 
     { 
      origImage = Image.FromStream(s); 
     } 

     using (Image newImage = new Bitmap(path)) 
     { 
      // Get the image's original width and height 
      int originalWidth = origImage.Width; 
      int originalHeight = origImage.Height; 

      // To preserve the aspect ratio 
      float ratio = Math.Min((float)originalWidth, (float)originalHeight); 

      Graphics graphics = Graphics.FromImage(newImage); 
      graphics.SmoothingMode = SmoothingMode.HighQuality; 
      graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; 
      graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; 

      string strSoftwareVersion = "Version " + StrVersion; 

      var oVersionFont = new Font("Arial", 15f, FontStyle.Bold); 
      SizeF strSize = graphics.MeasureString(strSoftwareVersion, oVersionFont); 

      float mX = (float)((originalWidth * 0.85) - 5.0); 
      float mY = (float)((originalHeight * 0.85) - 5.0); 
      float mWidth = (float) (strSize.Width + 5.0); 
      float mHeight = (float)(strSize.Height + 10.0); 

      /* 
      * Alternate I tried. 
      */ 
      //GraphicsPath blackfont = new GraphicsPath(); 
      //SolidBrush brsh = new SolidBrush(Color.White); 
      //blackfont.AddString("TEST APP", oVersionFont.FontFamily, (int)FontStyle.Bold, 15, new Point((int)(originalWidth * 0.85), (int)(originalHeight * 0.85)), StringFormat.GenericDefault); 
      //graphics.FillPath(brsh, blackfont); 

      /* 
      *Software Version String 
      */ 
      graphics.DrawString("Version " + StrVersion, new Font("Arial", 15f, FontStyle.Bold), Brushes.White, (int)(originalWidth * 0.85), (int)(originalHeight * 0.85)); 

      /* 
      * Save processed image 
      */ 
      newImage.Save(newPath, ImageFormat.Jpeg); 
     } 
     origImage.Dispose(); 
    } 
} 

enter image description here
你可以從圖像中看到,文字的周邊區域的模糊和相當突出。我很確定這是由於Alpha級別的混淆或TextRendering問題,但只是無法指出確切的問題。

+1

您可以發佈一個例子的結果?你嘗試關閉平滑嗎? – TaW

+0

如果你想操縱圖像,那麼我會建議你使用Image imagemagick(http://www.imagemagick.org/script/index.php) –

+0

@TaW:是的,我嘗試平滑它 –

回答

1

這段文字對我來說很好看。

爲了使它更脆,您可以關閉所有的抗鋸齒功能。

'周邊地區'顯然顯示了一些jpeg文物

好的文字和jpeg不一起走得很好。

要麼從jpeg quality settings變成默認值(約75%),要麼去png

需要注意的是90-95%質量的同時,大大提高了文本的質量也大大擴大規模和去爲png可能你除了空間節省是無損..

+0

是的,它會增加圖像的大小。尺寸不是我的要求所關注的。再次感謝您的解決方案 –

0

我有一個類似的問題,當被繪製到圖像上的文本是相當嚴重的別名。這是我的解決方案,可以產生合理的文字質量。

「text」是一個System.Windows.Media.FormattedText實例。

+0

使用PNG編碼器顯然會更好,所以這很難回答這個問題,它明確詢問有關GDI – TaW