Как сохранить объект BufferedImage в файл? - PullRequest
2 голосов
/ 23 мая 2019

Я пытаюсь сохранить изображение в формате png, но не могу получить изображение для создания, несмотря на это решение .

Я использую selenium webDriver, чтобы сделать скриншотокна браузера Chrome getScreenshotAs() возвращает байтовый массив, который я поместил в объект ByteArrayInputStream.У меня также есть прямоугольник view, который содержит размеры, в которые я хочу обрезать изображение, используя getSubimage().

с кодом, представленным ниже, изображение не создается, когда я добавляю imgfile.createNewFile() файлсоздается, но полностью пуст и не регистрируется как файл 'png'.

По сути, все, что я хочу сделать, - это взять изображение, которое у меня есть в памяти, в виде байтового массива, обрезать его до определенных размеров исохраните его как файл png.На самом деле, я знаю, но не могу понять.Любая помощь с благодарностью.

ByteArrayInputStream imgbytes = new ByteArrayInputStream(((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES));
BufferedImage bimg = ImageIO.read(imgbytes);

bimg = bimg.getSubimage(view.getX(), view.getY(), view.getWidth(), view.getWidth());

File imgfile = new File("C:\\Users\\User\\Documents\\newimg.png");
ImageIO.write(bimg, "png", imgfile);

1 Ответ

2 голосов
/ 23 мая 2019

Я протестировал ваш пример кода и смог получить скриншот. Поскольку у меня нет переменной view, просто жестко закодируйте некоторые допустимые значения следующим образом:

ByteArrayInputStream imgbytes = new ByteArrayInputStream(((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES));
assert imgbytes.available() > 0;
BufferedImage bimg = ImageIO.read(imgbytes);
bimg = bimg.getSubimage(0, 0, 500, 500);
assert bimg.getHeight() > 0;
assert bimg.getWidth() > 0;
File imgfile = new File("screenshot.png");
ImageIO.write(bimg, "png", imgfile);
assert imgfile.length() > 0;

Вы должны добавить строки подтверждения и выяснить, где поток прерывается, но я предполагаю, что: 1) существует некоторая проблема с переменной view и предоставлением недопустимых значений, 2) выходной файл imgfile не может быть написано (проверьте права доступа, правильный путь и т. д.)

...