2012-02-27 2 views
0

나는 잘 작동하지만, 이미지의 크기가 점점쓰기 텍스트

private bool HavException { get; set; } 
private string ExceptionMessage { get; set; } 
public Bitmap SourceImage { get; set; } 
public Bitmap DestinationImage { get; set; } 
public ImageMethods() 
{ 
    HavException = false; 
    ExceptionMessage = string.Empty; 
} 
public Image AddWatermarkText(Image img, string textOnImage) 
{ 
    try 
    { 
     textOnImage = ConfigurationManager.AppSettings["textOnImage"]; 
     var opacity = Int32.Parse(ConfigurationManager.AppSettings["opicity"]); 
     var red = Int32.Parse(ConfigurationManager.AppSettings["red"]); 
     var green = Int32.Parse(ConfigurationManager.AppSettings["green"]); 
     var blue = Int32.Parse(ConfigurationManager.AppSettings["blue"]); 
     var fontSize = Int32.Parse(ConfigurationManager.AppSettings["fontSize"]); 
     var fontName = ConfigurationManager.AppSettings["fontName"]; 

     var lobFromImage = Graphics.FromImage(img); 
     var lobFont = new Font(fontName, fontSize, FontStyle.Bold); 
     var lintTextHw = lobFromImage.MeasureString(textOnImage, lobFont); 
     var lintTextOnImageWidth = (int)lintTextHw.Width; 
     var lintTextOnImageHeight = (int)lintTextHw.Height; 
     var lobSolidBrush = new SolidBrush(Color.FromArgb(opacity, Color.FromArgb(red, green, blue))); 
     // lobFromImage.Clear(Color.White); 
     lobFromImage.DrawImage(img, img.Height, img.Width); 

     var posLeft = (img.Width - lintTextOnImageWidth)/2; 
     posLeft = posLeft > 0 ? posLeft : 5; 
     var lobPoint = new Point(posLeft, (img.Height/2) - (lintTextOnImageHeight/2)); 
     // var lobPoint = new Point(RandomNumber(0, img.Width - lintTextOnImageWidth), RandomNumber(0, img.Height - lintTextOnImageHeight)); 
     lobFromImage.DrawString(textOnImage, lobFont, lobSolidBrush, lobPoint); 

     lobFromImage.Save(); 
     lobFromImage.Dispose(); 
     lobSolidBrush.Dispose(); 
     lobFont.Dispose(); 
    } 
    catch (Exception ex) 
    { 
     HavException = true; 
     ExceptionMessage = ex.Message; 
    } 
    return img; 
} 

모든 것은 아래로 작성된 함수를 호출 이미지에 텍스트를 작성하기위한 핸들러를 만들었습니다 2 ~ 3 배 증가했습니다. 크기가 너무 많이 증가하지 않는 방법이 있습니까? 원본 이미지로 jpg 있습니다.

감사

답변

1

이해가되지 않는 전화를 다음과 이미지 크기 팽창의 원인이 될 수 있습니다 : 이것은 (높이, 폭) 위치에 원래의 이미지를 그릴 것

lobFromImage.DrawImage(img, img.Height, img.Width); 

- 예 : 200 x 100 이미지가 있으면 위의 호출은 (100, 200) 위치에 이미지를 그리고 아마도 캔버스를 300 x 300 크기로 늘릴 것입니다.

워터 마크를 추가하려면 텍스트를 그려야합니다. 제 생각에 위 라인을 제거하면 트릭을 수행 할 수 있습니다.

또한 lobFromImage.Save();은 의심스러워 보입니다. 그래픽의 개체 상태가 스택에 저장되므로 이미지를 디스크에 저장하는 것과 관련이 없습니다.

+0

두 줄을 모두 제거했지만 여전히 이미지 크기가 커지고 있습니다. 그것은 원래 크기의 모든 이중을 얻고 있습니다. 이제 더 나은 접근 방법이 되겠습니까? –

+0

@krshekhar, 어떻게 이미지 파일을 열거 나 저장합니까? 그 코드뿐만 아니라 게시하십시오! – VinayC

+0

다른 응용 프로그램에서 사용할 수있는 중앙 집중식 이미지 서버가 있습니다. 이미지 서버에서 요청 및 응답에 대한 HTTP 처리기를 만들었습니다. 다음과 같습니다 –