J'ai vu plusieurs questions sur la manière d'encoder un fichier image en base64, mais que diriez-vous de l'inverse de l'inverse - Comment puis-je reconstituer une image d'une chaîne de base64 stockée dans un fichier XML?
<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>
...
4 Réponses :
transformez-le en HTML.
<img src="data:{mime};base64,{data}" />
Quel processeur et extensions XSLT utilisez-vous?
Et je veux être capable de générer des fichiers image, c'est créer clip_image001.gif, puis dans la sortie HTML get
, car je dois générer un hachage à partir du fichier d'image également.
Merci! C'est ce que je voulais, COS, il écrit en fait les images vers des fichiers externes.
Je pense que cela devrait être saxon: base64binary-to-octets code> (avec le suivi s code>). Voir Saxica.com/documentation/extensions/functions.html
Erreur: le préfixe doit se résoudre à un espace de noms: XS, en ligne XS: base64binary (image codée My-Base64), Plus B> Fonction d'extension saxon.sf.net : base64binary-to-octets est inconnu
@Sarz Je pense que c'est une fonctionnalité premium et vous avez besoin de la version PE ou EE. Saxica.com/html/documentation/fonctions/saxon/ ...
Les travaux suivants:
<img>
<xsl:attribute name="src">
<xsl:value-of select="concat('data:image/gif;base64,',xPath)"/>
</xsl:attribute>
</img>
+1 @StrangeDays: Merci pour votre réponse! Je ne vais pas examiner cela (il y a longtemps) à tout moment, mais si cela fonctionne effectivement, cela ressemble à une solution beaucoup plus propre et élégante que les autres suggérées ici jusqu'à présent.
oublié un espace là-bas:
Il s'agit de générer un élément HTML img avec la source de base64. Pas exactement une réponse à la question.
Il existe une meilleure méthode disponible depuis Saxon 9.5 via le module d'extension de fichier expath (disponible en Saxon-pe et saxon-ee).
Voici un fragment du code que j'utilise pour extraire des fichiers d'image binaire de Documents de mots (source XML est en format WordProcessingML): P>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:file="http://expath.org/ns/file" xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage">
<xsl:template match="/pkg:package">
<xsl:apply-templates select="pkg:part/pkg:binaryData"/>
</xsl:template>
<xsl:template match="pkg:binaryData">
<xsl:variable name="filename">
<xsl:value-of select="replace(../@pkg:name, '/word/media/', '')"/>
</xsl:variable>
<xsl:variable name="path" select="concat('/some/folder/', $filename)"/>
<xsl:message><xsl:value-of select="$path"/></xsl:message>
<xsl:value-of select="file:write-binary($path, xs:base64Binary(string()))"/>
</xsl:template>