Java 通过异常将字节数组转换为jpg图像文件
嗨,我有一个字节数组,我正在转换为jpg图像,但这是一个例外,如下请解释我这是什么问题Java 通过异常将字节数组转换为jpg图像文件,java,file-io,bytearray,jpeg,Java,File Io,Bytearray,Jpeg,嗨,我有一个字节数组,我正在转换为jpg图像,但这是一个例外,如下请解释我这是什么问题 ByteArrayInputStream bis = new ByteArrayInputStream(someByteArray); Iterator<?> readers = ImageIO.getImageReadersByFormatName("jpg"); //ImageIO is a class containing stati
ByteArrayInputStream bis = new ByteArrayInputStream(someByteArray);
Iterator<?> readers = ImageIO.getImageReadersByFormatName("jpg");
//ImageIO is a class containing static methods for locating ImageReaders
//and ImageWriters, and performing simple encoding and decoding.
ImageReader reader = (ImageReader) readers.next();
Object source = bis;
ImageInputStream iis = ImageIO.createImageInputStream(source);
reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();
BufferedImage image = reader.read(0, param);
//got an image file
BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
//bufferedImage is the RenderedImage to be written
Graphics2D g2 = bufferedImage.createGraphics();
g2.drawImage(image, null, null);
File imageFile = new File("D:\\newrose2.jpg");
ImageIO.write(bufferedImage, "jpg", imageFile);
编辑:
如果字节数组已经包含有效的JPEG数据,则无需调用JPEG读写器——可以使用普通文件I/O将字节写入文件 如果字节数组实际上包含某种格式的原始像素数据,则需要将其直接加载到BuffereImage(如via)中,并将其编码为JPEG
您在尝试解码时遇到异常,这意味着它不是JPEG数据,而是原始像素数据。或者,它可能是一种完全不同的图像类型,或者它在数组中的某个偏移处(而不是在数组的开头)有一个图像,或者它根本不是一个图像。消息很清楚:图像文件的格式不正确。此外,所有的设置代码都非常复杂。您好,我也在这样做,但我没有得到。请查看我的更新代码。@user3511026问题是,字节数组中的数据是什么格式的?它是从gps设备发送的,只连续发送图像数据。@user3511026所以。。里面有什么?那有图像数据外壳我发送了那个文件你能告诉我在哪里上传这个文件吗?我会上传的。
javax.imageio.IIOException: Invalid JPEG file structure: SOS before SOF
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImageHeader(Native Method)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readNativeHeader(JPEGImageReader.java:550)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readNativeHeader(JPEGImageReader.java:550)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.checkTablesOnly(JPEGImageReader.java:295)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.gotoImage(JPEGImageReader.java:427)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readHeader(JPEGImageReader.java:543)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:986)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:966)
at Trnsport.writejpegfile(Trnsport.java:398)
at Trnsport.getData(Trnsport.java:107)
at Trnsport.run(Trnsport.java:63)
at java.lang.Thread.run(Thread.java:722)
FileOutputStream fos = new FileOutputStream("image" + new Date().getTime() + ".jpg");
fos.write(someByteArray);
fos.close();