【问题标题】:Convert any image format to JPG将任何图像格式转换为 JPG
【发布时间】:2023-03-14 11:25:02
【问题描述】:

我有一个在 Azure 上运行的 Web 应用程序。用户可以上传图像,我为他们保存该图像。现在,当我收到图像时,我将其命名为byte[]。我想将其保存为JPG 以节省空间。源图像可以是任何格式,例如 PNG、BMP 或 JPG。

有可能吗?这需要在 Azure 上运行,我使用的是 WebApps/MVC5/C#。

感谢您的帮助。

【问题讨论】:

  • 感谢您的回复。上面链接中的方法 BitmapToBytes 可能是解决方案。它在本地工作。我正在部署到 Azure 进行测试。将返回结果。
  • @mjwills 感谢该方法也适用于 Azure。我上传了一个 png 1.7 meg 并保存为 azure blob 为 jpg 213kb。非常感谢。

标签: c#


【解决方案1】:

获取内存流,然后使用 System.Drawing

var stream = new MemoryStream(byteArray)
Image img =  new Bitmap(stream);
img.Save(@"c:\s\pic.png", System.Drawing.Imaging.ImageFormat.Png);

保存文件的最后一行,可以选择格式。

【讨论】:

  • 科迪谢谢。是的,这与上面发布的链接非常相​​似。我会将您的方法标记为解决方案,但会将确切的两种方法发布为另一种解决方案。干杯。
  • 有没有一种方法可以在不保存到磁盘的情况下转换图像格式?比如在内存流中改变格式,然后保存到数据库中。
【解决方案2】:

所以@mjwills 和 Cody 的答案是正确的。我还是想把我真正需要的两个方法放上去:

    public static Image BitmapToBytes(byte[] image, ImageFormat pFormat)
    {
        var imageObject = new Bitmap(new MemoryStream(image));

        var stream = new MemoryStream();
        imageObject.Save(stream, pFormat);

        return new Bitmap(stream);
    }

还有:

    public static byte[] ImgToByteArray(Image img)
    {
        using (MemoryStream mStream = new MemoryStream())
        {
            img.Save(mStream, img.RawFormat);
            return mStream.ToArray();
        }
    }

大家干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 2023-03-05
    • 2015-03-12
    • 1970-01-01
    相关资源
    最近更新 更多