Base64 छवियों को डिकोड करना और फ़ाइल में सहेजना


4

मुझे अपनी हार्ड ड्राइव पर वेब बेस से वास्तविक जीआईएफ और जेपीईजी फाइलों तक कुछ बेस 64 छवियों को सहेजने की आवश्यकता है। क्या वहाँ एक उपयोगिता है जो मेरी सहायता कर सकती है? मैंने चारों ओर देखा है और या तो मैं एक नहीं देख रहा हूं या यह पता नहीं लगाया है कि किसी को ठीक से कैसे उपयोग किया जाए।

दूसरे शब्दों में, मैं इस लिंक में एक पृष्ठ पर अंतर्निहित छवि लेना चाहता हूँ:

<img src="data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="info" id="ext-gen1128">

..और इसे मेरे बॉक्स पर एक फ़ाइल में सहेजें। आपकी सहायता के लिए धन्यवाद।

जवाबों:


4

छवि URI के लिए मैंने दूसरे तरीके (img to6464) पर जाने के लिए इसे लिखा था। मुझे यकीन है कि आपको इसकी ज़रूरत के लिए उल्टा पड़ सकता है।

#!/usr/bin/env python
import sys
import os
import base64

if(__name__ == '__main__'):
    arglen = len(sys.argv)
    if arglen > 1:
        imgfile = open(sys.argv[1], 'rb').read()
        b64img = base64.b64encode(imgfile)
        file_name = os.path.splitext(sys.argv[1])
        fname = file_name[0]
        fext = file_name[1]

        b64imgfile = open(fname + fext + '.txt', 'w')
        for line in b64img:
            b64imgfile.write(line)
        print fname
        print fext
        print('done')
    else:
        print('No img file specified!')

अद्यतन करें

* यहाँ कुछ कोड है जो उपरोक्त को उल्टा कर देगा। एकमात्र चेतावनी यह है कि आपको यह जानना आवश्यक है कि क्या यह पीएनजी, जेपीजी, इत्यादि है, जो कि डेटा के यूआरआई में होना चाहिए जो HTML पृष्ठ के भीतर आपके द्वारा उन्हें खींच रहा है " img src = 'डेटा: छवि / png ; बेस 64 ... "(मैं नीचे png मान रहा हूँ) *

#!/usr/bin/env python
import sys
import os
import base64

if(__name__ == '__main__'):
    arglen = len(sys.argv)
    if arglen > 1:
        b64file = open(sys.argv[1], 'rb').read()
        imgData = base64.b64decode(b64file)
        file_name = os.path.splitext(sys.argv[1])
        fname = file_name[0]
        fext = '.png'

        imgFile = open(fname + fext, 'wb')
        imgFile.write(imgData)
        print('done')
    else:
        print('No file specified!')

3

अस्थायी फ़ाइल में डेटा url को सहेजने के लिए, आप उपयोग कर सकते हैं urlretrieve() पायथन 3.4 में:

#!/usr/bin/env python3
from mimetypes import guess_extension
from urllib.request import urlretrieve

# example image from http://tools.ietf.org/html/rfc2397
url = """data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw
   AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz
   ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp
   a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl
   ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis
   F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH
   hhx4dbgYKAAA7"""
filename, m = urlretrieve(url)
print(filename, guess_extension(m.get_content_type()))

वाह! यह अधिक उत्थान के योग्य है
Cesar Canassa

सही और ऐसा मीठा उपाय।
Bhumi Singhal

2

यदि आप कुल कमांडर का उपयोग करते हैं, तो यह base64 / UUE को डिकोड करेगा, बशर्ते कि आप डेटा को .b64 या .uue एक्सटेंशन वाली फ़ाइल में सहेजते हैं। Winzip और WinRar इसे भी करेगा।


2

मैं उस पृष्ठ पर गया था जिस पर आप इशारा करते हैं, क्रोम के साथ। छवि पर राइट-क्लिक करें, एक तत्व का निरीक्षण करें ... हम एक में जाते हैं <img> बेस 64-इनकोड वाली Gif छवि के साथ टैग, लेकिन यह वास्तव में एक साधारण 1x1 प्लेसहोल्डर है।
इसलिए हम इंस्पेक्टर के संसाधन टैब पर जा सकते हैं (तत्वों के बगल में), और हम ब्याज की छवियों को बेस 64-एनकोडेड पीएनजी में देख सकते हैं।
डेटा पर क्लिक करें: बाईं ओर की छवि, आपको एक पूर्वावलोकन सहित संसाधन पर विवरण मिलता है। आप पूर्वावलोकन पर राइट-क्लिक कर सकते हैं और छवि को सहेज सकते हैं ...

जैसा कि सलाह दी गई है, इन छवियों के साथ कॉपीराइट मुद्दों से सावधान रहें ...

नोट: मैंने एक और तरीका आज़माया: आप संसाधनों के URL को कॉपी कर सकते हैं, और उन्हें एक साधारण HTML फ़ाइल में पेस्ट कर सकते हैं <img src="<base64-encoded data>"> टैग। एक अच्छे ब्राउज़र में HTML फ़ाइल देखें, और आप उन पर राइट-क्लिक करके छवियों को बचा सकते हैं।


1

जब आप किसी वेब-ब्राउज़र से किसी वेब पेज को सहेजते हैं तो उसे चित्रों को भी सहेजना चाहिए। IE में आप वेब पेज के रूप में सहेजें, पूरा चुनें। चित्र सबफ़ोल्डर में होंगे और jpg या png प्रारूप में होंगे - ब्राउज़र HTTP डेटा ट्रांसफर के लिए उपयोग किए जाने वाले किसी भी एन्कोडिंग के साथ संबंधित है।


मैंने कोशिश की है, और यह एक महान विचार है। लेकिन "छवियों" को एक css फ़ाइल में base64 स्ट्रिंग्स के रूप में परिभाषित किया गया है, और पृष्ठ को सहेजना css फ़ाइल को बचाता है, न कि वास्तविक चित्रों को। (वह URL देखें जिसे मैंने नीचे टिप्पणी में चिपकाया था कि मैं किसके साथ काम कर रहा हूं और जो मैं बचाने की कोशिश कर रहा हूं।) मैं स्क्रीन कैप्चर करने और उन्हें इस तरह से सहेजने के लिए हवा कर सकता हूं, लेकिन यह अच्छा नहीं होगा ।
larryq

ऐसा लगता है कि साइट लोगों को छवियों की नकल करने से रोकने के लिए कुछ लंबाई तक जाती है। मैं कहीं और देखूँगा जहाँ कॉपीराइट स्वामी ने एक समान चित्र एक क्रिएटिव कॉमन्स लाइसेंस के तहत उपलब्ध कराया है।
RedGrittyBrick

1

वहाँ कई उपकरण हैं जो आपको बेस 64 को डिकोड करने में मदद कर सकते हैं। कुछ को डाउनलोड करने के लिए सबसे अच्छा कैसे काफी हद तक इस पर निर्भर करता है कि आप इसे कैसे प्राप्त कर रहे हैं।

बहुत ज्यादा वेब-ट्रैफ़िक बेस 64 एनकोडेड नहीं है ... मोटे तौर पर क्योंकि यह बहुत कुशल नहीं है, और यह बिल्कुल भी सुरक्षित नहीं है। (बेस 64 एन्क्रिप्शन नहीं है ... यह डेटा को केवल मानव-पठनीय बनाने के लिए अस्पष्ट करता है) यदि आप किसी पाठ-फ़ाइल या कुछ ऐसे में कच्चे स्ट्रीम डेटा प्राप्त कर सकते हैं ... इसे फिर से इकट्ठा करने के कई तरीके हैं। इसके अतिरिक्त, डेटा में फ़ाइल के बारे में जानकारी नहीं होगी ... यानी फ़ाइल-नाम, आकार, प्रकार, आदि ... यह डेटा की एक धारा होगी ... और यह निर्धारित करना है कि यह क्या है।

कोई भी मौका हम देख सकते हैं कि डेटा कहां से आ रहा है? ... यह वास्तव में आपको अधिक उपयुक्त उत्तर देने में मदद करेगा।


निश्चित रूप से, मैं जिस पृष्ठ को देख रहा हूं वह है dev.sencha.com/deploy/touch/examples/kitchensink (क्रोम ब्राउज़र केवल मुझे डर लगता है, IE या फ़ायर्फ़ॉक्स में काम नहीं करता है) यदि आप बाईं ओर के उदाहरणों पर जाते हैं, तो "उपयोगकर्ता इंटरफ़ेस" देखें, फिर "निचला टैब" पृष्ठ के निचले भाग के आइकन base64 प्रारूप, & lt; एंबेड & gt; टैग। मैं उन पर पाने के लिए और उन्हें gif फ़ाइलों को बचाने के लिए प्यार करता हूँ।
larryq

0

यह मजेदार है क्योंकि आपने मुझे पूरी तरह से जवाब दिया है, मुझे इसका मतलब बताएं। मेरे पास 'डेटा: इमेज / जीआईएफ; बेस 64,' के बाद कुछ क्रेज़ी बेस 64 स्ट्रिंग हैं। मैं इमेज को वापस जेपीईजी में बदलना चाहता था, लेकिन मुझे नहीं पता था कि कैसे और मैं वास्तव में सिर्फ स्क्रिप्ट का उपयोग किए बिना इसे जल्दी से करना चाहते थे। , अजगर, आदि (हालांकि यह कई मामलों में जाने का एक अच्छा तरीका है)। मेरे पास अभी एक छवि थी जिसे मुझे अभी बदलने की आवश्यकता है।

जैसे ही आपने मुझे "img src =" टैग दिखाया, मैंने तुरंत समझ लिया कि ब्राउज़र पहले से ही आधार 64 कोड को समझता है। मैंने अभी एक टेक्स्ट डॉक्यूमेंट खोला है, टैग जोड़ा है <img src="data:image/gif;base64,..."> इसे * .html एक्सटेंशन के रूप में सहेजा गया और इसे ब्राउज़र में खोला (उनमें से कोई भी काम), छवि पर राइट क्लिक किया और सहेज लिया गया। बेस 64 से वोइला इंस्टा-इमेज।

धन्यवाद!!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.