【问题标题】:convert byte[] of jp2 to jpg file将 jp2 的 byte[] 转换为 jpg 文件
【发布时间】:2011-06-28 04:36:12
【问题描述】:

我有一个 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


    【解决方案1】:

    我们没有任何内置的 .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);
    

    【讨论】:

    • 我支持,见右侧面板上的here
    • 这就是我在寻找的地方。我认为您将 JPEG2000 压缩与 jp2 文件格式混淆了。 jp2 文件使用 JPEG2000 压缩,但这并不意味着库可以读取 jp2 格式。
    • @Ed S,看到这个 SO 问题:stackoverflow.com/questions/590471/jpeg-2000-support-in-c-net。答案已被接受——这似乎暗示 jp2 文件格式也受支持。
    • 好的,我只是指出它不在列表中。我自己没有使用过图书馆。然而,该线程的 OP 似乎也可能令人困惑 - “.NET 似乎无法打开 JP2 (Jpeg 2000) 文件”
    • @Ed S: 你错了.. 根据Wikipedia jp2 是 JPG2000 文件的标准文件扩展
    【解决方案2】:

    从 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 等

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-25
      • 2021-08-20
      • 2011-11-04
      • 2011-06-08
      • 1970-01-01
      相关资源
      最近更新 更多