我有一个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[]
。现在又出现了另一个问题;存在内存泄漏!有人可以把它拿出来吗?
答案 0 :(得分: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);
答案 1 :(得分: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等。