Как получить содержимое в кодировке base64 для ImageReader? - PullRequest
2 голосов
/ 18 июня 2010

Как мне прочитать изображение в строку в кодировке base64 по его ImageReader?

Вот пример исходного кода с использованием HtmlUnit.Я хочу получить строку base64 img:

  WebClient wc = new WebClient();
  wc.setThrowExceptionOnFailingStatusCode(false);
  wc.setThrowExceptionOnScriptError(false);
  HtmlPage p = wc.getPage("http://flickr.com");
  HtmlImage img = (HtmlImage) p.getByXPath("//img").get(3);
  System.out.println(img.getImageReader().getFormatName());

Ответы [ 3 ]

4 голосов
/ 18 июня 2010

HtmlUnit HtmlImage#getImageReader() возвращает javax.imageio.ImageReader, который является частью стандартного Java 2D API .Вы можете получить BufferedImage из него, который вы, в свою очередь, можете написать в OutputStream любого аромата, используя ImageIO#write().

Кодек Apache Commons имеет Base64OutputStream, который можно просто украсить OutputStream с помощью.

HtmlImage img = (HtmlImage) p.getByXPath("//img").get(3);
ImageReader imageReader = img.getImageReader();
BufferedImage bufferedImage = imageReader.read(0);
String formatName = imageReader.getFormatName();
ByteArrayOutputStream byteaOutput = new ByteArrayOutputStream();
Base64OutputStream base64Output = new base64OutputStream(byteaOutput);
ImageIO.write(bufferedImage, formatName, base64output);
String base64 = new String(byteaOutput.toByteArray());

Или, если вы хотите записать его в файл напрямую:

// ...
FileOutputStream fileOutput = new FileOutputStream("/base64.txt");
Base64OutputStream base64Output = new base64OutputStream(fileOutput);
ImageIO.write(bufferedImage, formatName, base64output);
0 голосов
/ 18 июня 2010

Вы можете использовать один из методов encodeBase64

из кодек apache commons .

и создать строку из результирующего массива байтовконструктор String (bytes []).

0 голосов
/ 18 июня 2010

Я не совсем уверен, что именно вы хотите.

Но как насчет создания собственного Reader (см. Javax.imageio.stream.ImageInputStreamImpl), содержащего материал Base64? Может быть, это внешний бесплатный Base64Encoder может помочь вам.

Что-нибудь, что можно было бы так использовать в конце концов?

WebClient wc = new WebClient(); 
wc.setThrowExceptionOnFailingStatusCode(false); 
wc.setThrowExceptionOnScriptError(false); 

HtmlPage p = wc.getPage("http://flickr.com"); 
HtmlImage img = (HtmlImage) p.getByXPath("//img").get(3); 

MyBase64EncodingReader reader = new MyBase64EncodingReader(img);
System.out.println(reader.toString());
...