当前位置: 首页 > 面试题库 >

如何从Java保存带有tEXt或iTXt块的PNG?

弘柏
2023-03-14
问题内容

我目前正在使用javax.imageio.ImageIO编写PNG文件。我想包括一个tEXt块(以及这里列出的任何块),但是看不到这样做的任何方法。

通过com.sun.imageio.plugins.png.PNGMetadata的外观,这应该是可能的。

对于任何线索或答案,我将不胜感激。

M.


问题答案:

经过一些反编译后我遇到的解决方案如下…

RenderedImage image = getMyImage();         
Iterator<ImageWriter> iterator = ImageIO.getImageWritersBySuffix( "png" );

if(!iterator.hasNext()) throw new Error( "No image writer for PNG" );

ImageWriter imagewriter = iterator.next();
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
imagewriter.setOutput( ImageIO.createImageOutputStream( bytes ) );

// Create & populate metadata
PNGMetadata metadata = new PNGMetadata();
// see http://www.w3.org/TR/PNG-Chunks.html#C.tEXt for standardized keywords
metadata.tEXt_keyword.add( "Title" );
metadata.tEXt_text.add( "Mandelbrot" );
metadata.tEXt_keyword.add( "Comment" );
metadata.tEXt_text.add( "..." );
metadata.tEXt_keyword.add( "MandelbrotCoords" ); // custom keyword
metadata.tEXt_text.add( fractal.getCoords().toString() );

// Render the PNG to memory
IIOImage iioImage = new IIOImage( image, null, null );
iioImage.setMetadata( metadata ); // Attach the metadata
imagewriter.write( null, iioImage, null );


 类似资料:
  • 问题内容: ,仅以定界格式保存数据。如何在JAVA中保存带有标题的数据框。 问题答案: 如果您想另存为csv文件,我建议使用软件包。您可以使用以下带有标头的格式保存数据框。 您可以参考下面的链接,以获取更多信息:https : //github.com/databricks/spark-csv 具有Maven依赖性。

  • 问题内容: 我正在尝试使用outputstream从URL保存文件。该URL由https保护。所以当我尝试获取文件时出现以下错误 假设我要从此URL打开文件 所以我做类似的事情: 结果不会在专用选粉机上发生任何事情,因为会显示错误。如何从HTTPS网址获取文件? 问题答案: HTTPS连接需要握手。即明确承认对方。服务器已经通过HTTPS证书标识了自己,但是您显然没有在信任存储区中使用此证书,并且

  • 我试图写一个平滑的代码(文本从严格到左边运行在屏幕上)。它几乎和我想要的一样,但还是有些口吃。我希望它像天空中移动的云一样平滑。30年前,我只使用了几行汇编代码,但在Java中我失败了。 如果我增加速度(我一次移动文本的像素数),情况会变得更糟。 屏幕刷新是否缺少某种同步? null 当我使用30 fps并且只移动文本一个像素时,在4K显示器上看起来相当不错,但也很慢。当我把速度提高到2像素时,它

  • < code >转换器希望使用由< code>ConfigProducer生成的注入< code >配置。其中< code>ConfigProducer在WAR中,但< code > converter 和< code>Config在jar中。遗憾的是,似乎没有注入< code>config导致< code > javax . EJB . EJB exception:javax . persist

  • 我正在尝试让selenium按下打印弹出的保存按钮来保存pdf文件。我可以让selenium按下“print”按钮,但一旦弹出窗口出现adress chrome://print/就不会发生任何事情。还有别的办法吗? 到目前为止,这是零件的代码:

  • 问题内容: 我试图使用在stackoverflow上发现的不同方法来保存.pdf文件,但是,我总是会损坏它。当我使用记事本打开损坏的文件时,我得到以下信息: 后来,我尝试使用@BalusC提供的答案从浏览器中保存文件。这个解决方案非常有帮助:我能够摆脱这些问题。但是,它也会产生损坏的.pdf。但是当我用记事本打开它时,它是完全不同的。但是,不再有登录问题: 我还有什么其他选择? PS:当我尝试使用