Feemarker将图像写入html

时间:2012-11-12 06:54:47

标签: java freemarker

无论如何都要在freemarker中写图像而不是像

那样给出链接

<img src="${pathToPortalImage}

注意:我们不能使用otputstream或freemarker中的某些内容?

2 个答案:

答案 0 :(得分:9)

您可以将图像直接嵌入html img标记内的base64。

要将图片转换为base 64,您可以使用Apache Commons (codec)

以下是使用Apache Commons IO + Codec的解决方案(但如果您愿意,可以不使用):

File img = new File("file.png");
byte[] imgBytes = IOUtils.toByteArray(new FileInputStream(img));
byte[] imgBytesAsBase64 = Base64.encodeBase64(imgBytes);
String imgDataAsBase64 = new String(imgBytesAsBase64);
String imgAsBase64 = "data:image/png;base64," + imgDataAsBase64;

然后将变量imgAsBase64传递给Freemarker上下文,并像这样使用它:

<img alt="My image" src="${imgAsBase64}" />

答案 1 :(得分:1)

上面的一个很好的例子。但是使用JAVA 8,我们可以做到这样的事情:

Path path = Paths.get("image.png");
byte[] data = Files.readAllBytes(path);
byte[] encoded = Base64.getEncoder().encode(data);
String imgDataAsBase64 = new String(encoded);
String imgAsBase64 = "data:image/png;base64," + imgDataAsBase64;