2010-08-20 3 views
0

데이터베이스에서 이미지를로드하고 일부 입력에 따라 동적으로 크기를 조정하려고합니다..Net을 사용하여 mimetype을 보존하면서 이미지 크기 조정

public ActionResult GetImage(string imageID, int? width, int? height, bool constrain) 
    { 
     ValidateImageInput(width, height, constrain); 
     ImageWithMimeType info = LoadFromDatabase(imageID); 

     if(info == null) 
      throw new HttpException(404, "Image with that name or id was not found."); 

     Resize(info.Bytedata, width, height, constrain, info.MimeType); 

     return File(info.Data, info.MimeType); 
    } 

어떻게 인코딩 유형 등을 보존하는 방법으로 크기 조정을 구현하는 것이 :

코드는 다음과 같이인가? Image resizing efficiency in C# and .NET 3.5을 살펴 봤지만 인코딩을 유지하는 방법을 알지 못합니다. 새 Bitmap을 만드는 것이 확실하게 인코딩되지 않았습니까?

+0

제목은 당신이 MIME 형식을 유지하려는 제안 할 수 있지만, 문제 자체는 (내가 파일 형식이라고 가정하는) 인코딩 유형에 대해 이야기합니다. 무엇을 보존하고 싶습니까? –

+0

내 대답보기. 인코딩으로 나는 코덱 형식을 의미했습니다. – Max

답변

3

사실, 결국 Google의 도움으로 해결할 수있었습니다. 내가 질문에 너무 기쁘게 생각한 것 같아.

private ImageFormat GetEncoderInfo(string mimeType) 
    { 
     // Get image codecs for all image formats 
     ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders(); 

     // Find the correct image codec 
     for (int i = 0; i < codecs.Length; i++) 
      if (codecs[i].MimeType == mimeType) 
       return new ImageFormat(codecs[i].FormatID); 
     return null; 
    } 

이게 I가 이루어지는 약간 다른 버전 어쨌든, 기본 비트 I가 ImageCodecInfo.GetImageEncoders()를 사용하여 마임에서 적절한 ImageFormat를 찾는 것으로, 다음 다음으로, 올바른 부호화를 사용하여 저장있다 ImageFormat를 사용 http://www.switchonthecode.com/tutorials/csharp-tutorial-image-editing-saving-cropping-and-resizing

에 대한 코드는 단순히

image.Save(dest, GetEncoderInfo(mimetype)); 
1

파일 유형을 유지하려면 원본 파일의 파일 유형을보고 파일을 저장할 때 파일 형식을 지정해야합니다. 당신은 아마 나중에 바이트 배열로 변환 MemoryStream을 저장할 것입니다 귀하의 경우에는

Bitmap b = new Bitmap("foo.jpg"); 
b.Save("bar.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 

(당신의 info.Data 유형 byte[]입니다 추측).