2016-04-11 30 views
2

我想將優化的圖像上傳到亞馬遜。如何將ImageCodecInfo轉換爲字節[]或流

因此,我發現這個article解釋瞭如何優化壓縮級別的圖像。

問題是此示例將映像保存到磁盤,我需要將其保存到Amazon存儲。

我有這樣的代碼:

public static ImageCodecInfo OptimizeImage(Image image, string fileName, long compression, string type) 
{ 
    var encoderParams = new EncoderParameters(1) 
    { 
     Param = {[0] = new EncoderParameter(Encoder.Quality, compression)} 
    }; 

    return GetEncoderInfo(type); 
} 

private static ImageCodecInfo GetEncoderInfo(string mime_type) 
{ 
    ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders(); 

    for (int i = 0; i <= encoders.Length; i++) 
    { 
     if (encoders[i].MimeType == mime_type) 
      return encoders[i]; 
    } 

    return null; 
} 

我應該有一個Streambyte[]對象,以便將其發送到UploadImageToAmazon方法參數。

所以,我有一個圖像對象和它的ImageCodecInfo,我怎麼能把它轉換成Streambyte[]

或者,如果你可以建議我如何優化圖像並將它們上傳到亞馬遜也會很好。

謝謝。

回答

4

您可以將圖像對象保存到一個流與Image.Save Method (Stream, ImageFormat)

編輯:

如果我在所提供的示例代碼,您鏈接回顧:

private void SaveJpg(Image image, string file_name, long compression) 
{ 
    try 
    { 
     EncoderParameters encoder_params = new EncoderParameters(1); 
     encoder_params.Param[0] = new EncoderParameter(
      System.Drawing.Imaging.Encoder.Quality, compression); 

     ImageCodecInfo image_codec_info = 
      GetEncoderInfo("image/jpeg"); 
     File.Delete(file_name); 
     using(var imageStream = new Stream()){ 
      // save to stream 
      image.Save(imageStream, image_codec_info, encoder_params); 
      // upload 
      UploadImageToAmazon(imageStream); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("Error saving file '" + file_name + 
      "'\nTry a different file name.\n" + ex.Message, 
      "Save Error", MessageBoxButtons.OK, 
      MessageBoxIcon.Error); 
    } 
} 
+2

@Misha,看看在鏈接文章中的'image.Save'行。可以使用'MemoryStream'來代替傳入文件名作爲第一個參數。 – David

+0

@David我無法使用Save方法,因爲我想將它保存到Amazon而不是本地。或者我錯過了什麼?我可以使用這種方法將圖像直接保存到亞馬遜? –

+1

@Misha,您將使用常規的「保存」方法保存到「MemoryStream」中。通過使用'MemoryStream',什麼都不會被保存到磁盤。然後,您可以使用'MemoryStream'上的'ToArray'方法來獲取要上傳到Amazon的數據。 – David