我正在测试以其他方式在Java中存储jpg文件的方法,并且使用缓冲图像中的ByteArrayInputStream
总是会减小文件大小。反正还有吗?
因此,对于整个图片,我目前正在尝试编写一个客户端-服务器图像存储程序(具有最终的编辑功能,请考虑使用Adobe Lightroom)。从客户端上载到服务器没有问题,从服务器上下载到客户端时,只需使用Files.readAllBytes(currentFile.toPath());
,反之亦然,因为它是作为文件存储的。
问题是当我要上载收到的相同图像时该怎么做(假设该图像已被编辑并想要重新上传到服务器)。我没有从中创建文件,因此无法使用readAllBytes
函数,它们仅存储为Image Object或BufferedImage。当我将其写入ByteArrayInputStream
并获得byte[]
数组的大小以发送回服务器时,它总是小于原始数组。
作为最后的手段,我可以将其设置为导出选项,因此您必须在编辑之前将图像从服务器下载到计算机上,但这会使工作流程效率降低。
currentFile = fileChooser.showOpenDialog(window);
try{
currentImage = new Image(currentFile.toURI().toString());
SelectedImageView.setImage(currentImage);
MainImageLayout.setLeft(SelectedImageView);
System.out.println("Original file length "+currentFile.length());
try {
BufferedImage bImage = ImageIO.read(currentFile);
byte[] fileContent = Files.readAllBytes(currentFile.toPath());
System.out.println("bytes from fileContent " +fileContent.length);
ByteArrayOutputStream tmp = new ByteArrayOutputStream();
ImageIO.write(bImage, "jpg", tmp);
tmp.flush();
byte[] imageBytes = tmp.toByteArray();
tmp.close();
long length = imageBytes.length;
System.out.println("length of bytearraystream " + length);
Printed Results:
Original file length 196874
bytes from fileContent 196874
length of bytearraystream 117010