2014-11-06 2 views
0

Telerik RadAsyncUpload 컨트롤을 사용하여 업로드 된 이미지를 압축하는 중입니다. I가 업로드 된 파일 입력 스트림을 얻을 백엔드 (스트림 클래스)이 압축 방식에 패스 C# 이미지 압축 - 잘라 내기 이미지 발생

: 다음 바이트의리스트에 바이트 추가

private byte[] GetCompressedImage(Stream stream, ImageFormat format) 
    { 
     ImageCodecInfo imgCodec = ImageCodecInfo.GetImageEncoders().First(c => c.FormatID == format.Guid); 

     EncoderParameters codecParams = new EncoderParameters(1); 
     codecParams.Param[0] = new EncoderParameter(Encoder.Quality, 70L); 

     using (Bitmap bitmap = new Bitmap(stream)) 
     { 
      using (var ms = new MemoryStream()) 
      { 
       bitmap.Save(ms, imgCodec, codecParams); 
       return ms.ToArray(); 
      } 
     } 
    } 

업로드 된 각각의 파일을 나타내는 (이 제어는 배수를 허용한다). 그런 다음 FTP 폴더 등으로 전달합니다.

압축하는 것보다 이미지를 자르는 이유를 이해할 수 없습니다. 바이트는 더 작고, 너비와 높이는 같으며 이미지의 일부가 표시되지 않습니다.

아이디어가 있으십니까?

+0

"바이트를 바이트 목록에 추가 하시겠습니까?"라는 코드를 표시 할 수 있습니까? –

+0

비트 맵 작업을 해본 적이 있습니까? 웹 서버에 파일을 저장하거나 원래 이미지 바이트를 반환하여 FTP 코드를 배제하십시오. – WhoIsRich

답변

0

마침내 제대로 작동했습니다. 메서드를 바이트 목록 (일명 업로드 된 파일)에 전달하고 Image 객체에서 스트림이 아닌 메서드로 전달했습니다.

/// <summary> 
    /// Compress the image 
    /// </summary> 
    /// <param name="stream">Image stream</param> 
    /// <param name="format">Image format</param> 
    /// <returns>Byte array representing the image</returns> 
    public static byte[] GetCompressedImage(Image original, ImageFormat format) 
    { 
     ImageCodecInfo imgCodec = ImageCodecInfo.GetImageEncoders().First(c => c.FormatID == format.Guid); 

     EncoderParameters codecParams = new EncoderParameters(1); 
     codecParams.Param[0] = new EncoderParameter(Encoder.Quality, 70L); 

     using (var bitmap = new Bitmap(original)) 
     { 
      using (var ms = new MemoryStream()) 
      { 
       bitmap.Save(ms, imgCodec, codecParams); 
       return ms.ToArray(); 
      } 
     } 
    } 

제안 해 주셔서 감사합니다!