2016-04-11 3 views
2

Ich möchte ein optimiertes Bild auf Amazon hochladen.Wie man ImageCodecInfo in Byte [] oder Stream umwandelt

So dass ich dieses article gefunden habe, das erklärt, wie man ein Bild mit einem Kompressionsniveau optimiert.

Das Problem ist, dass dieses Beispiel das Bild auf der Festplatte speichert und ich es in Amazon-Speicher speichern muss.

Ich habe diesen Code:

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; 
} 

Ich sollte ein Stream oder byte[] Objekt, um es müssen die UploadImageToAmazon Methode als Parameter zu senden.

Also, ich habe ein Image-Objekt und seine ImageCodecInfo, wie kann ich es in Stream oder byte[] konvertieren?

Oder wenn Sie mir vorschlagen könnten, wie Sie Bilder optimieren und in Amazon hochladen, wäre auch gut.

Danke.

Antwort

4

Sie ein Image-Objekt in einen Stream speichern kann mit Image.Save Method (Stream, ImageFormat)

Edit:

Wenn ich mit dem Code versehen in dem Beispiel, das Sie verknüpft rekapitulieren:

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, werfen Sie einen Blick in der 'image.Save'-Zeile in Ihrem verknüpften Artikel. Anstatt einen Dateinamen als ersten Parameter zu übergeben, können Sie einen 'MemoryStream' verwenden. – David

+0

@David Ich kann die Save-Methode nicht verwenden, weil ich sie in Amazon speichern möchte und nicht lokal. Oder fehlt mir etwas? Kann ich diese Methode verwenden, um die Bilder direkt in Amazon zu speichern? –

+1

@Misha, verwenden Sie die normale 'Save' Methode, um zu einem' MemoryStream' zu speichern. Mit einem 'MemoryStream' wird nichts auf der Festplatte gespeichert. Dann können Sie die 'ToArray'-Methode für den' MemoryStream' verwenden, um die Daten zu erhalten, die Sie zu Amazon hochladen möchten. – David

Verwandte Themen