我编写的代码可以生成png图像并减少html代码的别名。
当我在我的api端点上运行时,我没有在单元测试中获得相同的结果
@Test
public void createImage2() throws Exception{
String fileNamePng = "createImage2_"+String.valueOf(System.currentTimeMillis() + ".png");
File image = new File("/tmp/img/"+ fileNamePng);
HtmlImageGenerator htmlImageGenerator = new HtmlImageGenerator();
htmlImageGenerator.loadHtml(svg);
htmlImageGenerator.saveAsImage(image);
BufferedImage sourceImage = ImageIO.read(image);
Graphics g = sourceImage.getGraphics();
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
ImageIO.write(sourceImage,"png",image);
}
在我的api端点
}else if(svg.startsWith("<div")){
File image = new File("/tmp/"+fileName);
HtmlImageGenerator htmlImageGenerator = new HtmlImageGenerator();
htmlImageGenerator.loadHtml(svg);
htmlImageGenerator.saveAsImage(image);
BufferedImage sourceImage = ImageIO.read(image);
Graphics g = sourceImage.getGraphics();
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
ImageIO.write(sourceImage,"png",image);
Files.copy(image.toPath(), response.getOutputStream());
Files.delete(image.toPath());
}
response.flushBuffer();
结果是:/大小为3kb
它看起来好像所有部分gd2图形都没有应用但我可以在我的tmp文件中看到,当调试器在这些行中时,日期&#34;修改在&#34;改变了。
输入中的svg / html代码与api端点和单元测试相同。 (我检查了haschode)
修改1:
我使用了Scalr:
}else if(svg.startsWith("<div")){
System.out.println(svg.hashCode());
File image = new File("/tmp/"+fileName);
HtmlImageGenerator htmlImageGenerator = new HtmlImageGenerator();
htmlImageGenerator.loadHtml(svg);
height = (int) htmlImageGenerator.getSize().getHeight();
width = (int) htmlImageGenerator.getSize().getWidth();
BufferedImage test3 = Scalr.apply(htmlImageGenerator.getBufferedImage(),Scalr.OP_ANTIALIAS);
ImageIO.write(test3,"png",image);
Files.copy(image.toPath(), response.getOutputStream());
}
response.flushBuffer();
看起来像scalr doc中描述的模糊(来自scalr的抗锯齿更像是低模糊效果)
答案 0 :(得分:1)
从Java 2D图形教程中查看Controlling Rendering Quality可能是值得的。总而言之,不保证在所有Java平台上都应用渲染提示。
在运行单元测试的平台上,支持并正在应用这些提示。在API端点上,很明显没有应用抗锯齿,但文件仍然正确写入磁盘。
由于插值和抗锯齿设置会影响生成的图像,因此图像的大小也会受到影响。
如果您需要应用这些,您可以: