将图像从GIF格式转换为JPEG格式。

4

我需要将GIF转换为JPEG格式。我需要将字节保存为图像,然后重新打开它并将其转换为JPEG格式。我尝试使用两个流来更改类型,但出现了“GDI+中发生了通用错误”的错误。这是什么原因呢?

    public static byte[] GetJpegBytes(byte[] bytes)
    {
        using (var stream = new MemoryStream(bytes))
        {
            var temporaryImage = $"{Path.Combine(System.Web.HttpRuntime.AppDomainAppPath, Guid.NewGuid().ToString())}.jpeg";
            var image = Image.FromStream(stream);

            image.Save(temporaryImage, ImageFormat.Jpeg);
            using (var memoryStream = new FileStream(temporaryImage, FileMode.Open))
            {
                byte[] byteRsult = new byte[memoryStream.Length];
                memoryStream.Read(byteRsult, 0, (int)memoryStream.Length);
                memoryStream.Close();
                File.Delete(temporaryImage);
                return byteRsult;
            }
        }

    } 

https://en.wikipedia.org/wiki/GIF - SHMHP
你能把FileAccess.Read放在 "using (var memoryStream = new FileStream(temporaryImage, FileMode.Open, FileAccess.Read))" 里吗? - phonemyatt
我曾经能够,现在也能够,那只是一个错误 ;) - SHMHP
1
你在哪里遇到了GDI错误?是在Image.FromStream读取流时还是在image.Save写入JPEG时发生的?你确定输入流是有效的gif图像吗? - gofal3
2个回答

1

您可以使用此扩展程序来转换图像格式。 我使用这个简单的扩展程序来转换流。

public static Stream ConvertImage(this Stream originalStream, ImageFormat format)
{
          var image = Image.FromStream(originalStream);

               using(var stream = new MemoryStream())
           {
                image.Save(stream, format);
                stream.Position = 0;
                return stream;
           }
    }

用法:

var outputStream = stream.ConvertImage(ImageFormat.Png);

0

如果您不想使用流,可以尝试这个:

Bitmap bitmap = new Bitmap("C:\MyFile.jpg");

bitmap.Save("C:\MyNewFile.gif", ImageFormat.Gif);

...或者反过来,就像标题所说的那样,“从GIF到JPEG”。;-) - gofal3
1
@gofal3 当然可以,只需要更改文件名即可。 - SteinTheRuler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接