将jp2的字节[]转换为jpg文件

问题描述 投票:5回答:2

我有一个jp2字节数组,如何将其转换为JPG文件?谢谢

谢谢所有答案。我做了一些改变,几乎成功了。这是我的方法:

using (var reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        String id = (String)reader["ID"];
                        blob = (byte[])reader["Data"];

                        using (MemoryStream ms = new MemoryStream(blob))
                        {
                            FIBITMAP dib = FreeImage.LoadFromStream(ms);                            
                            if (dib.IsNull)
                            {
                                continue;
                            }                           
                            string jpgName = getJpgName(id);
                            FreeImage.Save(FREE_IMAGE_FORMAT.FIF_JPEG, dib, jpgName, FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYNORMAL);
                        }
                    }
                }

我从数据库中读取了byte[]。现在出现了另一个问题。存在内存泄漏!有人可以挑出来吗?

c# .net jpeg image-conversion
2个回答
2
投票

我们没有.Net内置的任何功能,但是,您可以使用FreeImage,这是一个免费的库,可以执行此操作。

Here is an Example on doing this

FIBITMAP dib = FreeImage.LoadEx("test.jp2");
//save the image out to disk    
FreeImage.Save(FREE_IMAGE_FORMAT.FIF_JPEG, dib, "test.jpg", FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYNORMAL);
//or even turn it into a normal Bitmap for later use
Bitmap bitmap = FreeImage.GetBitmap(dib);

对于从字节流进行转换,您可以尝试以下操作:

byte[] myByte = new byte[10];
MemoryStream theMemStream = new MemoryStream();
theMemStream.Write(myByte, 0, myByte.Length);
FreeImageBitmap fbm = FreeImageBitmap.FromStream(theMemStream);
fbm.Save("text.jpg",FREE_IMAGE_STREAM.FIF_JPEG);

0
投票

从nuget包下载FreeImageAPI。在您的项目中添加FreeImageAPI.dll的引用。检查您的程序包文件夹中是否有FreeImage.dll,并将该dll保留在项目bin文件夹中。从nuget包下载FreeImageAPI。在您的项目中添加FreeImageAPI.dll的引用。检查您的程序包文件夹中是否有FreeImage.dll,并将该dll保留在项目bin文件夹中。

    public ActionResult FileUpload(HttpPostedFileBase file)
    {
      Stream str =  file.InputStream;
      MemoryStream theMemStream = new MemoryStream();
      FIBITMAP dib = FreeImage.LoadFromStream(str);
      FreeImage.SaveToStream(dib,theMemStream,FREE_IMAGE_FORMAT.FIF_JPEG);
      return RedirectToAction("Index", theMemStream);
    }

将MemStream更改为byte [],base64string等。>>

© www.soinside.com 2019 - 2024. All rights reserved.