gpt4 book ai didi

java - 相同的代码在不同的上下文中运行会产生不同的结果

转载 作者:行者123 更新时间:2023-11-30 06:40:17 24 4
gpt4 key购买 nike

我编写了生成 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);
}

结果是/大小是7.8Kb enter image description here

在我的 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

enter image description here

看起来 gd2 图形的所有部分都没有应用,但我可以在我的 tmp 文件中看到,当调试器位于这些行中时,“修改日期”的日期发生了更改。

输入中的 svg/html 代码对于 api 端点和单元测试是相同的。 (我检查了haschode)

编辑1:

我使用了标量:

              }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();

结果是/大小是 4.97 Kb enter image description here

它看起来像标量文档中描述的模糊(标量的抗锯齿更像是低模糊效果)

最佳答案

可能值得一看 Controlling Rendering Quality来自 Java 2D 图形教程。总而言之,渲染提示不保证适用于所有 Java 平台。

在您运行单元测试的平台上,这些提示受到支持并正在应用。在 API 端点上,很明显没有应用抗锯齿,但文件仍然正确写入磁盘。

由于插值和抗锯齿设置会影响生成的图像,因此图像的大小也会受到影响。

如果您需要应用这些,您可以:

  1. 使用不同的图像处理库。 What is the best Java image processing library approach?可能会感兴趣。
  2. 将您的 API 端点切换到不同的 Java 实现。

关于java - 相同的代码在不同的上下文中运行会产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44476023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com