开发者

How can I convert a BufferedImage object into an InputStream or a BLOB?

开发者 https://www.devze.com 2023-04-10 05:18 出处:网络
I am trying to store an image uploaded by the user into the database with a LONGBLOB attribute... I ran into a problem with a Prepa开发者_JS百科redStatement that has two methods to set a blob which ar

I am trying to store an image uploaded by the user into the database with a LONGBLOB attribute... I ran into a problem with a Prepa开发者_JS百科redStatement that has two methods to set a blob which are:

public void setBinaryStream(int parameterIndex, InputStream x)

public void setBlob(int parameterIndex, Blob x)

public void setBlob(int parameterIndex, InputStream inputStream)

Now the problem is I have a BufferedImage object which must be converted into Blob or InputStream to upload...

How can I do this without losing the original image format or quality?


How can I do this without losing the original image format or quality?

You need to save it using some appropriate (lossless) format. The png format is one option.

The ImageIO class has methods for writing out an image to an output stream.

Here's a complete example of how you get hold of an InputStream from which you can read the PNG-representation of the content of a BufferedImage:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "png", baos);
InputStream is = new ByteArrayInputStream(baos.toByteArray());


Here is a sample code:

ByteArrayOutputStream bas = new ByteArrayOutputStream();
ImageIO.write(image,"jpg", bas);
byte[] bytes = bas.toByteArray();
InputStream is = new ByteArrayInputStream(bytes);

Don't forget to check the second ImageIO.write parameter to your required image format (e.g. "jpg", "bmp", "png").


Write functions to serialize/unserialize the BufferedImage to/from a byte [] and use classes ByteArrayInputStream and ByteArrayOutputStream.

You probably need to serialize the image type, width, height and the image pixel values (obtained with BufferedImage.getRGB(x, y)).

The alternative is to call ImageIO.write(image, "png", outStream) to convert the image to PNG format and write it to a ByteArrayOutputStream. There is an equivalent ImageIO.read(inputStream) method to read the image from a ByteArrayInputStream. There is some processing overhead in converting to/from PNG. But PNG is a compressed image format and you will save a lot of space compared with storing the images uncompressed.


To create a Blob:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "png", baos);
Blob blFile = new javax.sql.rowset.serial.SerialBlob(baos.toByteArray());
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号