简体   繁体   English

将 jp2 的 byte[] 转换为 jpg 文件

[英]convert byte[] of jp2 to jpg file

I have a byte array of jp2, how can I convert that to JPG file?我有一个 jp2 的字节数组,如何将其转换为JPG文件? Thank you谢谢

Thank all the answers.感谢所有的答案。 I made some differences and nearly succeeded.我做了一些改变,几乎成功了。 Here is how I do it:这是我如何做到的:

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);
                        }
                    }
                }

I read byte[] from database.我从数据库中读取了byte[] Now another problem arises;现在出现了另一个问题; there exists memory leak!存在内存泄漏! Could someone pick it out?有人能挑出来吗?

We don't have anything built in .Net to do this but, You can use FreeImage which is a free library that can do this.我们没有任何内置的 .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);

For converting from a stream of bytes u can try this:要从字节流转换,您可以尝试以下操作:

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);

Download FreeImageAPI from nuget package.从 nuget 包下载 FreeImageAPI。 Add the reference of FreeImageAPI.dll in your project.在您的项目中添加 FreeImageAPI.dll 的引用。 Check your package folder in that you will have FreeImage.dll, keep that dll in project bin folder.检查您的包文件夹,您将拥有 FreeImage.dll,将该 dll 保存在项目 bin 文件夹中。 Download FreeImageAPI from nuget package.从 nuget 包下载 FreeImageAPI。 Add the reference of FreeImageAPI.dll in your project.在您的项目中添加 FreeImageAPI.dll 的引用。 Check your package folder in that you will have FreeImage.dll, keep that dll in project bin folder.检查您的包文件夹,您将拥有 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);
    }

Change theMemStream to byte[], base64string etc.将 MemStream 更改为 byte[]、base64string 等。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM