2016-11-29 3 views
0

이미지에 두 개의 워터 마크 텍스트를 추가하려고합니다. 이미지 크기에 관계없이 이미지의 왼쪽 하단에 하나와 오른쪽 하단에 하나씩 워터 마크 텍스트를 추가하려고합니다.크기가 같지만 dpi가 다른 이미지의 워터 마크 텍스트 글꼴 크기

public void AddWaterMark(string leftSideText, string rightSideText, string imagePath) 
{ 
    string firstText = leftSideText; 
    string secondText = rightSideText; 

    Bitmap bitmap = (Bitmap)Image.FromFile(imagePath);//load the image file 

    PointF firstLocation = new PointF((float)(bitmap.Width * 0.035), bitmap.Height - (float)(bitmap.Height * 0.06)); 
    PointF secondLocation = new PointF(((float)((bitmap.Width/2) + ((bitmap.Width/2) * 0.6))), bitmap.Height - (float)(bitmap.Height * 0.055)); 

    int opacity = 155, baseFontSize = 50; 
    int leftTextSize = 0, rightTextSize = 0; 
    leftTextSize = (bitmap.Width * baseFontSize)/1920; 
    rightTextSize = leftTextSize - 5; 
    using (Graphics graphics = Graphics.FromImage(bitmap)) 
    { 
     Font arialFontLeft = new Font(FontFamily.GenericSerif, leftTextSize); 
     Font arialFontRight = new Font(FontFamily.GenericSerif, rightTextSize); 
     graphics.DrawString(firstText, arialFontLeft, new SolidBrush(Color.FromArgb(opacity, Color.White)), firstLocation); 
     graphics.DrawString(secondText, arialFontRight, new SolidBrush(Color.FromArgb(opacity, Color.White)), secondLocation); 
    } 
    string fileLocation = HttpContext.Current.Server.MapPath("~/Images/Albums/") + Path.GetFileNameWithoutExtension(imagePath) + "_watermarked" + Path.GetExtension(imagePath); 
    bitmap.Save(fileLocation);//save the image file 
    bitmap.Dispose(); 
    if (File.Exists(imagePath)) 
    { 
     File.Delete(imagePath); 
     File.Move(fileLocation, fileLocation.Replace("_watermarked", string.Empty)); 
    } 
} 

내가 직면하고 문제가 제대로 물 마크 텍스트의 font size 설정 함께 : 다음 나의 방법이다. 1600 x 900 픽셀 크기의 이미지가 두 개 있고 첫 번째 이미지의 길이가 dpi 인 경우 72이고 두 번째 이미지의 길이가 dpi 인 경우 240입니다. 위의 방법은 72dpi의 이미지에서는 제대로 작동하지만 240dpi 인 이미지의 경우 워터 마크 텍스트의 font size이 너무 커서 오버플로합니다. dpi의 이미지와 함께 font size을 올바르게 계산하는 방법은 같지만 크기는 같습니까?

+0

따라서 더 큰 DPI 값의 글꼴 크기를 효과적으로 줄이시겠습니까? (DPI에 의존하지 않고 글꼴 크기를 픽셀 단위로 표시) – grek40

답변

1

이 간단한 트릭이 작동해야합니다

텍스트를 적용하기 전에 이미지의 dpi을 설정합니다. 다음에 텍스트를 이전 값으로 재설정하십시오.

float dpiXNew = 123f; 
float dpiYNew = 123f; 

float dpiXOld = bmp.HorizontalResolution; 
float dpiYOld = bmp.VerticalResolution; 

bmp.SetResolution(dpiXNew, dpiYNew); 

using (Graphics g = Graphics.FromImage(bmp)) 
{ 
    TextRenderer.DrawText(g, "yourText", ....) 
    ... 
} 

bmp.SetResolution(dpiXOld, dpiYOld);