2015-09-21 4 views
5

मैं ImageMagick से "कन्वर्ट" कमांड लाइन टूल का उपयोग करने की कोशिश कर रहा हूं। मेरे पास बेस 64 एन्कोडेड पीएनजी फ़ाइल है और मुझे इसे दूसरे प्रारूप में बदलने की जरूरत है।मैं बेस 64 छवि को कैसे परिवर्तित करूं?

convert inline:file.txt file.jpg 

लेकिन जब मैं यह करते हैं, मैं इस त्रुटि संदेश मिलता है:

convert: corrupt image `file.txt' @ error/constitute.c/ReadInlineImage/910. 

मैं क्या कर रहा हूँ मैं एक forum discussion जिससे पता चलता है कि मैं इस सिंटैक्स का उपयोग करने में सक्षम होना चाहिए documentation तलाश में हूं और गलत? मैं बेस 64 छवि फ़ाइल को पढ़ने के लिए कैसे परिवर्तित करूं?

उत्तर

4

अपडेट किया गया उत्तर अब है कि मैं अपने आप को बेहतर समझते हैं :-)

मूल रूप से, आप बेस 64 openssl इस तरह का उपयोग कर एक छवि सांकेतिक शब्दों में बदलना कर सकते हैं:

openssl enc -base64 -in image.png > image.b64 

हालांकि, अगर आप ImageMagick इसे पढ़ने में सक्षम होने के लिए, ImageMagick बताए जाने के लिए आपको शुरुआत में एक छोटे से शीर्षलेख की आवश्यकता है। शीर्ष लेख शामिल होना चाहिए:

data:image/png;base64, 

ऊपर openssl आदेश का उपयोग कर उत्पन्न अपने बेस 64 एन्कोडेड डेटा का स्थान है। तो, क्या सुविधाओं अपने खोल है के आधार पर, आप इसे इस प्रकार bash में कर सकता है एक यौगिक बयान के साथ:

{ echo "data:image/png;base64,"; openssl enc -base64 -in input.png; } > image.b64 

या Windows में इस तरह:

echo data:image/png;base64,   > image.b64 
openssl enc -base64 -in image.png >> image.b64 

एक बार जब आप उस में छवि है प्रारूप, आप तो ImageMagick इस तरह से यह कार्रवाई करने के लिए आगे बढ़ सकते हैं:

convert inline:image.b64 result.png 

मूल उत्तर

बहुत प्रयोग करने के बाद, मैं इसे कर सकता हूं !!!:-)

एरिक के (@emcconville) सेटअप के साथ प्रारंभ:

# For example 
convert rose: rose.png 
# Create base64 file 
openssl enc -base64 -in rose.png -out rose.txt 

और अब अंतिम पंक्ति के रूप में इस गंदगी जोड़ें:

{ echo "data:image/png;base64,"; cat rose.txt; } | convert inline:- out.jpg 

मुझे लगता है कि data:image/png;base64, बेस 64 में मौजूद नहीं है फ़ाइल openssl द्वारा बनाई गई है, इसलिए मैं एक कंपाउंड स्टेटमेंट बनाता हूं जो उस प्लस को stdinImageMagick पर भेजता है।

3

अपडेट किया गया जवाब

ImageMagick format docs से ...

The inline image look similar to inline:data:;base64,/9j/4AAQSk...knrn//2Q== . If the inline image exceeds 5000 characters, reference it from a file (e.g. inline:inline.txt).

यह दो "पकड़ लिया" पर संकेत जब इनलाइन प्रारूप का उपयोग कर। पहले किसी भी मानक बेस 64 व्हाइटस्पेस (यूनिक्स लाइन ब्रेक) को हटाया जाना चाहिए ताकि सभी जानकारी एक पंक्ति पर हों। और दूसरा, कि 5000 वर्णों से ऊपर का कोई भी डेटा फ़ाइल बफर से पढ़ा जाना चाहिए।

# Copy data to new file, striping line-breaks & adding INLINE header. (Please advise better sed/awk.) 
cat file.txt | tr -d "\r\n" | awk '{print "data:image/png;base64,"$1}' > file.inline 
# Read file as expected 
convert inline:file.inline file.jpg 

मूल (वास्तव में सही नहीं) जवाब

"भ्रष्ट छवि" संदेश मुझसे कहता है base64 फ़ाइल में खाली स्थान के हो सकता है। यदि ऐसा है, तो उपयोगिता काम करेगी। -

# For example 
convert rose: rose.png 
# Create base64 file 
openssl enc -base64 -in rose.png -out rose.txt 
# Read inline & data from stdin -- after stripping whitespace 
cat rose.txt | tr -d "\r\n" | convert inline:data:- out.jpg 
+0

मुझे डर है कि मुझे मूल रूप से एक ही त्रुटि मिली: "कन्वर्ट: भ्रष्ट छवि 'डेटा: -' @ त्रुटि/constitute.c/ReadInlineImage/910।" मुझे लाइन एंडिंग (यूनिक्स) के अलावा मूल फ़ाइल में कोई भी व्हाइटस्पेस दिखाई नहीं दे रहा है। – skiphoppy

+0

क्या आप एक ही छवि को एक नई छवि से पुनः बना सकते हैं? – emcconville

+0

हां, मैं इसे किसी भी बेस 64 छवि के साथ प्राप्त करता हूं जिसका उपयोग मैं करता हूं। – skiphoppy

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