无论如何都要在freemarker中写图像而不是像
那样给出链接 <img src="${pathToPortalImage}
注意:我们不能使用otputstream或freemarker中的某些内容?
答案 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;