c# - 如何将 ImageCodecInfo 转换为 byte[] 或 Stream

标签 c# image optimization

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

这样我就找到了这个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 方法。

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

或者如果您可以建议我如何优化图像并将其上传到亚马逊也会很好。

谢谢。

最佳答案

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

关于c# - 如何将 ImageCodecInfo 转换为 byte[] 或 Stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36553692/

相关文章:

c# - 如何使用 Func<> 更新对象属性?

html - 垂直对齐表格单元格中的文本,图像向左浮动?

c++ - 我的 C++ 编译器会优化我的代码吗?

c# - Listview 中的 ItemCommand 未在用户控件中触发

c# - 如何在 C++ 中构建动态数组并将其返回给 C#/.NET

html - 图像旁边奇怪的跨度对齐

javascript - 优化 javascript if else 18 次

algorithm - 如何最好地优化使用对角线(非对角线)矩阵的 IDL 中的矩阵乘法

c# - 获取 Type 中使用的程序集的路径

python - 将动态c lib.so集成到python