2017-03-25 4 views
0

ImageProcessor를 사용하여 이미지의 해상도 나 품질을 낮추지 만 이미지 결과 크기가 어떻게되는지 확인하지 못합니다 5 메가 바이트 이하입니다. 이미지 크기를 3840-2160으로 설정하려고 시도했지만 더 나은 옵션을 사용하려고합니다.5 메가 바이트보다 큰 이미지가 그 크기보다 작게 만들어 졌는지 확인하십시오. C#

private static byte[] redimensionImage(ref byte[] photoBytes) 
    { 
     var byteCuantity = ConvertBytesToMegabytes(photoBytes.Count()); 
     ISupportedImageFormat format = new JpegFormat(); 

     using (MemoryStream inStream = new MemoryStream(photoBytes)) 
     { 
      using (MemoryStream outStream = new MemoryStream()) 
      { 
       // Initialize the ImageFactory using the overload to preserve EXIF metadata. 
       using (ImageFactory imageFactory = new ImageFactory(preserveExifData: true)) 
       { 
        // Load, resize, set the format and quality and save an image. 
        using (var imageProcessor = imageFactory.Load(inStream)) 
        { 
         var originalHeight = imageProcessor.Image.Size.Height; 
         var originalWidth = imageProcessor.Image.Size.Width; 

         //calculate aspect ratio 
         var aspect = originalWidth/(float)originalHeight; 
         int newWidth, newHeight; 

         var dimenssionTooSmall = false; 
         if (originalWidth <= originalHeight && originalWidth < 100) 
         { 
          //calculate new dimensions based on aspect ratio 
          newHeight = (int)(100/aspect); 
          var resizeLayer = new ResizeLayer(new Size(100, newHeight), ResizeMode.Min); 
          imageProcessor.Resize(resizeLayer); 
          dimenssionTooSmall = true; 
         } 
         else if (originalHeight < originalWidth && originalHeight < 100) 
         { 
          //calculate new dimensions based on aspect ratio 
          newWidth = (int)(100/aspect); 
          var resizeLayer = new ResizeLayer(new Size(newWidth, 100), ResizeMode.Min); 
          imageProcessor.Resize(resizeLayer); 
          dimenssionTooSmall = true; 
         } 

         if (byteCuantity > 1 || dimenssionTooSmall) 
         { 
          //format.Quality = 6; 

          imageProcessor.Resize(new ResizeLayer(new Size(3840, 2160), ResizeMode.Min)); 

          imageProcessor.Format(format); 
          imageProcessor.Save(outStream); 
          return outStream.ToArray(); 
         } 
         else 
         { 
          return inStream.ToArray(); 
         } 
        } 
       } 


      } 
     } 
    } 

감사와 안부 :

은 여기 내 코드입니다.

+0

변환 후 바이트 크기를 가져올 수 있습니까? 그것이 얼마나 큰지 알려줄 것입니다. – mariocatch

+0

예 가능한 경우, 올바른 크기가 될 때까지 재 처리를 피하고 싶습니다. –

답변

0

비트 맵으로 저장하지 않는 한 불행히도 다시 처리하지 않고도이 작업을 수행 할 수는 없습니다.

이미지를 저장할 때 이미지를 압축하지 않는 비트 맵을 제외하고 각각의 개별 형식으로 이미지를 저장하는 많은 압축 프로세스가 있습니다. 실제로 프로세스 자체를 거치지 않으면 파일 크기를 예측할 수 없습니다.

큰 형식의 이미지 샘플을 다른 형식으로 크기를 조정하고 출력 크기를 수집하여 향후 처리에 대한 대략적인 견적을 제공하여 가이드 라인 역할을 할 수있는 자신 만의 조회 표를 만들 수 있습니다.