gpt4 book ai didi

XSLT:将 base64 数据转换为图像文件

转载 作者:行者123 更新时间:2023-12-04 05:21:53 25 4
gpt4 key购买 nike

我已经看到几个关于如何在 base64 中编码图像文件的问题,但反过来如何 - 如何从存储在 XML 文件中的 base64 字符串重建图片?

<resource>
<data encoding="base64">
R0lGODlhEAAQAPMAMcDAwP/crv/erbigfVdLOyslHQAAAAECAwECAwECAwECAwECAwECAwECAwEC
AwECAyH/C01TT0ZGSUNFOS4wGAAAAAxtc09QTVNPRkZJQ0U5LjAHgfNAGQAh/wtNU09GRklDRTku
MBUAAAAJcEhZcwAACxMAAAsTAQCanBgAIf8LTVNPRkZJQ0U5LjATAAAAB3RJTUUH1AkWBTYSQXe8
fQAh+QQBAAAAACwAAAAAEAAQAAADSQhgpv7OlDGYstCIMqsZAXYJJEdRQRWRrHk2I9t28CLfX63d
ZEXovJ7htwr6dIQB7/hgJGXMzFApOBYgl6n1il0Mv5xuhBEGJAAAOw==
</data>
<mime>image/gif</mime>
<resource-attributes>
<file-name>clip_image001.gif</file-name>
</resource-attributes>
</resource>

鉴于上述 XML 节点 resource , 我该如何创建 clip_image001.gif ?

请建议:
  • XSLT 处理器和/或扩展支持这一点,加上
  • 一个示例 XSLT 触发
    转换

  • 请注意,它必须至少能够处理 GIF 和 PNG 文件格式。最好不限于任何操作系统。

    已实现的解决方案

    基于 Mads Hansen's解决方案。主要区别在于我引用了 net.sf.saxon.value.Base64BinaryValue直接在我的命名空间中而不是使用 saxon命名空间,因为我比 Saxonica 网站对 base64Binary-to-octets 的描述更直观地理解 Java API。和 base64Binary职能。
    <xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:b64="net.sf.saxon.value.Base64BinaryValue"
    xmlns:fos="java.io.FileOutputStream"
    ...
    exclude-result-prefixes="b64 fos">
    ...
    <xsl:for-each select="resource">
    <xsl:variable name="b64" select="b64:new(string(data))"/>
    ...
    <xsl:variable name="fos" select="fos:new(string($img))"/>
    <xsl:value-of select="fos:write($fos, b64:getBinaryValue($b64))"/>
    <xsl:value-of select="fos:close($fos)"/>
    </xsl:for-each>
    ...

    附言见 sibling question用于我实现如何获取识别图像文件所需的哈希值。

    这个问题是 another question I have asked previously的子问题.

    最佳答案

    I found this entry from the XSL maiing lists描述了如何使用 撒克逊扩展函数 xs:base64Binary-to-octet 使用 XSLT 2.0 样式表中的 Java FileOutputStream 将其流式传输到文件中:

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema";
    xmlns:saxon="http://saxon.sf.net/";
    xmlns:fos="java.io.FileOutputStream">
    <xsl:template match="/">
    <xsl:variable name="img" select="concat('c:\test\jesper', '.jpg')"/>
    <xsl:variable name="fos" select="fos:new(string($img))"/>
    <xsl:value-of select="fos:write($fos,
    saxon:base64Binary-to-octets(xs:base64Binary(my-base64-encoded-image)))"/>
    <xsl:value-of select="fos:close($fos)"/>
    </xsl:template>
    </xsl:stylesheet>

    关于XSLT:将 base64 数据转换为图像文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1684909/

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