2016-04-11 3 views
2

最適化された画像をAmazonにアップロードします。ImageCodecInfoをbyte []またはStreamに変換する方法

これで、圧縮レベルで画像を最適化する方法について説明した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; 
} 

私は、パラメータとしてUploadImageToAmazon方法にそれを送信するために、Streamまたはbyte[]オブジェクトを持つ必要があります。

私はImageオブジェクトとImageCodecInfoを持っていますが、どのようにStreamまたはbyte[]に変換できますか?

また、画像を最適化してアマゾンにアップロードする方法を教えてもらえればいいでしょう。

ありがとうございました。

答えて

4

あなたはImage.Save Method (Stream, ImageFormat)

編集でストリームにImageオブジェクトを保存することができます見て、

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ローカルにではなくAmazonに保存したいので、Saveメソッドを使用できません。または私は何かを逃している?この方法を使って画像をAmazonに直接保存することはできますか? –

+1

@Mishaでは、通常の 'Save'メソッドを使用して' MemoryStream'に保存します。 'MemoryStream'を使うと、何もディスクに保存されません。次に、 'MemoryStream'の' ToArray'メソッドを使って、Amazonにアップロードしたいデータを取得することができます。 – David

関連する問題