bgu*_*uiz 8 xslt file-io base64 image-processing evernote
我已经看到了几个关于如何在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>
Run Code Online (Sandbox Code Playgroud)
鉴于上述XML节点resource
,我该如何创建clip_image001.gif
?
请建议:
请注意,它必须至少能够处理GIF和PNG文件格式.优选地,不限于任何OS.
基于Mads Hansen的解决方案.主要区别在于我net.sf.saxon.value.Base64BinaryValue
直接在我的命名空间中引用而不是使用saxon
命名空间,因为我比Saxonica网站对函数base64Binary-to-octets
和base64Binary
函数的描述更直观地理解Java API .
<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>
...
Run Code Online (Sandbox Code Playgroud)
PS请参阅兄弟问题,了解如何获取识别图像文件所需的哈希值.
Mad*_*sen 10
我从XSL maiing列表中找到了这个条目,它描述了如何使用Saxon扩展函数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>
Run Code Online (Sandbox Code Playgroud)
以下作品:
<img>
<xsl:attribute name="src">
<xsl:value-of select="concat('data:image/gif;base64,',xPath)"/>
</xsl:attribute>
</img>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18698 次 |
最近记录: |