Getting an Image object from a byte array

淺唱寂寞╮ 提交于 2019-12-20 17:41:42

问题


I've got a byte array for an image (stored in the database). I want to create an Image object, create several Images of different sizes and store them back in the database (save it back to a byte array).

I'm not worried about the database part, or the resizing. But is there an easy way to load an Image object without saving the file to the file system, and then put it back in a byte array when I'm done resizing it? I'd like to do it all in memory if I can.

Something like:
Image myImage = new Image(byte[]);
or
myImage.Load(byte[]);

回答1:


You'd use a MemoryStream to do this:

byte[] bytes;
...
using (var ms = new System.IO.MemoryStream(bytes)) {
   using(var img = Image.FromStream(ms)) {
      ...
   }
}



回答2:


Based on your comments to another answer, you can try this for performing a transformation on an image that's stored in a byte[] then returning the result as another byte[].

public byte[] TransformImage(byte[] imageData)
{
    using(var input = new MemoryStream(imageData))
    {
        using(Image img = Image.FromStream(input))
        {
            // perform your transformations

            using(var output = new MemoryStream())
            {
                img.Save(output, ImageFormat.Bmp);

                return output.ToArray();
            }
        }
    }
}

This will allow you to pass in the byte[] stored in the database, perform whatever transformations you need to, then return a new byte[] that can be stored back in the database.




回答3:


Only answering the first half of the question: Here's a one-liner solution that works fine for me with a byte array that contains an image of a JPEG file.

Image x = (Bitmap)((new ImageConverter()).ConvertFrom(jpegByteArray));

EDIT: And here's a slightly more advanced solution: https://stackoverflow.com/a/16576471/253938




回答4:


I thought I'd add this as an answer to make it more visible.

With saving it back to a byte array:

    public Image localImage;
    public byte[] ImageBytes;

    public FUU_Image(byte[] bytes)
    {
        using (MemoryStream ImageStream = new System.IO.MemoryStream(bytes))
        {
            localImage = Image.FromStream(ImageStream);
        }

        localImage = ResizeImage(localImage);

        using (MemoryStream ImageStreamOut = new MemoryStream())
        {
            localImage.Save(ImageStreamOut, ImageFormat.Jpeg);
            ImageBytes = ImageStreamOut.ToArray();
        }

    }


来源:https://stackoverflow.com/questions/3290060/getting-an-image-object-from-a-byte-array

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!