2009-11-06 4 views
7

मैं कैसे बेस 64 में एक छवि फ़ाइल सांकेतिक शब्दों में बदलना करने के बारे में कई सवाल देखा है में बेस 64 डेटा कन्वर्ट, लेकिन कैसे दूसरी तरह के आसपास के बारे में - कैसे मैं एक XML फ़ाइल में संग्रहीत एक बेस 64 स्ट्रिंग से एक चित्र का पुनर्गठन करते हैं?XSLT: छवि फ़ाइलों

<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> 

ऊपर एक्सएमएल नोड resource, मैं clip_image001.gif बनाने के बारे में कैसे जाते हो देखते हुए?

का सुझाव दें:

  1. XSLT प्रोसेसर और/या एक्सटेंशन इसे सक्षम, प्लस
  2. एक नमूना XSLT कि चलाता है रूपांतरण

ध्यान दें कि यह कम से कम संभाल करने में सक्षम होना चाहिए जीआईएफ & पीएनजी फ़ाइल प्रारूप। पसंदीदा रूप से किसी भी ओएस तक सीमित नहीं है।


लागू समाधान

Mads Hansen's समाधान के आसपास आधारित है। मुख्य अंतर यह है कि मैंने net.sf.saxon.value.Base64BinaryValue को saxon नेमस्पेस का उपयोग करने के बजाय सीधे मेरे नामस्थान में संदर्भित किया, क्योंकि मैंने base64Binary-to-octets और 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 का एक उपविभाग है।

उत्तर

9

I found this entry from the XSL maiing lists का वर्णन करता है कि कैसे सैक्सन विस्तार समारोह XS उपयोग करने के लिए:

<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> 
: base64Binary करने वाली ओकटेट
इसे बाहर एक फाइल करने के लिए 2.0 स्टाइलशीट एक XSLT में जावा FileOutputStream का उपयोग कर स्ट्रीम करने के लिए
+0

धन्यवाद! यह वही है जो मैं चाहता था, क्योंकि यह वास्तव में बाहरी फाइलों को छवियों को लिख रहा है। – bguiz

+0

मुझे लगता है कि यह 'सैक्सन होना चाहिए: बेस 64 बाइनरी-टू-ऑक्टेट्स '(पीछे की ओर' के साथ)। Http://www.saxonica.com/documentation/extensions/functions.html –

+0

धन्यवाद, जैकम देखें। मैंने कोड नमूना सही किया है। –

1

उसे HTML में रूपांतरण।

<img src="data:{mime};base64,{data}" /> 
+0

आप क्या XSLT प्रोसेसर और एक्सटेंशन का उपयोग करते हैं:

यहाँ कोड मैं (स्रोत XML WordProcessingML स्वरूप में है) Word दस्तावेज़ों से बाइनरी छवि फ़ाइलों को निकालने के लिए उपयोग कर रहा हूँ का एक टुकड़ा है? – bguiz

+0

और मैं वास्तव में छवि फ़ाइलों को उत्पन्न करने में सक्षम होना चाहता हूँ, कि clip_image001.gif बनाने है, और फिर उत्पादन html में मिलता है, क्योंकि मैं भी चित्र फ़ाइल से एक हैश उत्पन्न करने के लिए की जरूरत है। – bguiz

6

निम्नलिखित काम करता है:

<img> 
    <xsl:attribute name="src"> 
    <xsl:value-of select="concat('data:image/gif;base64,',xPath)"/> 
    </xsl:attribute> 
</img> 
+0

+1 @StrangeDays: आपके उत्तर के लिए धन्यवाद! मैं इसे कभी भी देखने में नहीं जा रहा हूं (बहुत समय पहले), लेकिन अगर यह वास्तव में काम करता है, तो यह अब तक सुझाए गए अन्य लोगों की तुलना में अधिक स्वच्छ और सुरुचिपूर्ण समाधान की तरह दिखता है। – bguiz

+0

वहां एक जगह भूल गई: Steven

+0

यह BASE64 स्रोत के साथ HTML IMG तत्व उत्पन्न करना है। वास्तव में सवाल का जवाब नहीं है। –

0

एक बेहतर metho नहीं है डी एक्सपेथ फ़ाइल एक्सटेंशन मॉड्यूल (सैक्सन-पीई और सैक्सन-ईई में उपलब्ध) के माध्यम से सैक्सन 9.5 के बाद से उपलब्ध है।

<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> 

 संबंधित मुद्दे