У меня есть ByteArrayOutputStream, который содержит изображение JPEG в байтах. Мое требование состоит в том, чтобы отобразить это изображение на странице JSP (чтобы отобразить изображение во внешнем интерфейсе, используя HTML-теги). Как мне это сделать?

Я упомянул класс BufferedImage, но это сбивает меня с толку, потому что я новичок в этом.

4
Raja D 3 Июн 2009 в 12:53

2 ответа

Если изображение не слишком большое, можно сделать это следующим образом.

<img src="data:image/jpg;base64,iVBORw0KGgoAAAANS..." />

Где iVBORw0KGgoAAAANS... – это байты в кодировке Base64.

Кодирование Base64 можно выполнить с помощью библиотеки, например Ostermiller Java Utilities, Base64 Java Library<. /a> или org.apache. commons.codec.binary.Base64.

19
Peter Mortensen 2 Дек 2012 в 14:30
Этот метод встраивает изображение в отображаемый HTML-код, что также может увеличить размер файла.
 – 
Prabhu R
3 Июн 2009 в 13:04
Мое изображение очень маленькое. Это изображение штрих-кода размером width="166" height="44".. В приведенном выше примере, как я могу получить изображение из ByteArrayOutputStream?
 – 
Raja D
3 Июн 2009 в 13:07
166x44 не совсем «очень маленький» (обычно URI данных используются для очень маленьких изображений), но со штрих-кодом вам это может сойти с рук. В основном вам нужно кодировать данные в base64. Это отдельный, очень специфический вопрос, который, вероятно, уже обсуждался в другом месте на Stack Overflow.
 – 
Jon Skeet
3 Июн 2009 в 13:09
Из ByteArrayInputStream и с использованием Commons: List aList = new ArrayList(); int cByte = bais.read(); в то время как (cByte! = ноль) { aList.add (cByte); cByte = bais.read(); } byte[] result = Base64.encode(aList.toArray()); Строка imageData = новая строка (результат) И вы можете использовать imageData.
 – 
Valentin Rocher
3 Июн 2009 в 13:53

Если вы не используете "URI данных" (полезно для небольших изображений), браузер сделает два запросы: один для HTML и один для изображения. Вы должны иметь возможность вывести тег img, содержащий достаточно информации, чтобы вы могли ответить на последующий запрос изображения с данными в вашем ByteArrayOutputStream.

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

Если вы можете отложить генерацию изображения до тех пор, пока браузер не запросит фактическое изображение в первую очередь, это довольно идеально. Это может включать в себя добавление дополнительных параметров в URL-адрес изображения, таких как точки на графике, размер миниатюры для создания или что-то еще.

Если вы новичок и в JSP, и в HTML, я настоятельно рекомендую вам сначала сосредоточиться на стороне HTML. Подумайте, что вам нужно обслуживать и что будет делать браузер, прежде чем вы решите, как обслуживать его динамически. Начните со статических страниц и файлов для HTML и изображений, а затем решите, как их создать.

3
Peter Mortensen 2 Дек 2012 в 14:32