【问题标题】:How to convert ImageCodecInfo to byte[] or Stream如何将 ImageCodecInfo 转换为 byte[] 或 Stream
【发布时间】:2016-04-11 16:01:16
【问题描述】:

我想将优化后的图片上传到亚马逊。

所以我找到了这个article,它解释了如何优化具有压缩级别的图像。

问题是这个例子将图像保存到磁盘,我需要将它保存到亚马逊存储。

我有这个代码:

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 方法。

那么,我有一个 Image 对象和它的 ImageCodecInfo,如何将它转换为 Streambyte[]

或者如果你能建议我如何优化图像并将它们上传到亚马逊也很好。

谢谢。

【问题讨论】:

    标签: c# image optimization amazon


    【解决方案1】:

    您可以使用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);
        }
    }
    

    【讨论】:

    • @Misha,看看你链接文章中的image.Save 行。您可以使用MemoryStream,而不是将文件名作为第一个参数传递。
    • @David 我不能使用 Save 方法,因为我想将它保存到亚马逊而不是本地。还是我错过了什么?我可以使用这种方法将图像直接保存到亚马逊吗?
    • @Misha,您将使用常规的Save 方法保存到MemoryStream。通过使用MemoryStream,不会将任何内容保存到磁盘。然后就可以使用MemoryStream上的ToArray方法获取你要上传到亚马逊的数据了。
    猜你喜欢
    • 2018-01-15
    • 2021-12-05
    • 2023-03-15
    • 2019-05-01
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    相关资源
    最近更新 更多