base64

Jay first180 at gmail.com
Wed Apr 12 14:07:04 EDT 2006


I have bean trying to get my head around reading .GIF files from base64
strings,
Basically I need to specify a filename and convert it to base64 then I
can copy/past the string to wear I want it.
Cold somebody check this for me to see what I have done wrong:

If you run this program and enter a path for a .GIF file into the white
box and hit <Enter> it should display the string in the blue box.

To test this if you click the menu File Display it will create a top
level window displaying the image and giving the original string
underneath.

The bit I can not understand:

It will generate the base64 string but when trying to display it, it
reads the string up until the first ("/n") ("Cg==") <Return>
and then stops.

The base 64 string seams to be complete but when converted back it is
incomplete.

Thanks

Jay Dee

.......................START......................

from Tkinter import *
from base64 import *

############################################################################
############################################################################
# Module:   Base64 Encoder / Decoder.py
# Author:   Jay Dee
# Date:     08/04/2006
# Version:  Draft 0.1
# Coments:  A Base64 Encoder / Decoder for converting files into Base64
strings
############################################################################
############################################################################

class App:
    def __init__(self, root):
        root.title("Base64 Encoder / Decoder")
############################################################################
#   Menu Bar
############################################################################
        self.menubar = Menu(root)
    # create a pulldown menu, and add it to the menu bar
        self.filemenu = Menu(self.menubar, tearoff=0)
        self.filemenu.add_command(label="Display!",
command=self.Display)
        self.filemenu.add_separator()
        self.filemenu.add_command(label="Quit!", command=root.quit)
        self.menubar.add_cascade(label="File", menu=self.filemenu)
    # display the menu
        root.config(menu=self.menubar)
############################################################################
#   Main
############################################################################
#   File Input
        self.FileInputFrame = Frame(root)
        self.FileInputFrame.pack(side=TOP, fill=X)

        self.FileInputLine = Entry(self.FileInputFrame,
                                  bg="white",
                                  width=70)
        self.FileInputLine.pack(side=LEFT, fill=X, expand=1)
#   Display Area
        self.DisplayFrame = Frame(root)
        self.DisplayFrame.pack(side=TOP, fill=BOTH, expand=1)

        self.DisplayText = Text(self.DisplayFrame,
                                 bg="lightblue",
                                 width=95,
                                 height=40)
        self.DisplayText.pack(side=LEFT, fill=BOTH, expand=1)

        root.bind("<Return>",self.Encode)

    def Encode(self,event):
        '''
        Take's the string from (self.FileInputLine),
        converts it to base64 then desplays it in (self.DisplayText)
        '''
        self.DisplayText.delete(1.0,END)

        info = self.FileInputLine.get()
        if info == "":
            self.DisplayText.insert(END, "...Empty String...")
        else:
            try:
                file = open(info)
                try:
                    while 1:
                        line = file.readline()
                        if not line:
                            break
                        Encode = b64encode(line)
                        self.DisplayText.insert(END, Encode)
                except:
                    self.DisplayText.insert(END, "...Data Problem...")

            except:
                self.DisplayText.insert(END, "...No Sutch File...")

    def Display(self):
        '''
        Take's the string from (self.DisplayText), Creats a topleval
        frame and displays the Data
        '''
        info = self.DisplayText.get(1.0,END)
    # Display as Image
        try:
            self.DisplayImage = Toplevel()

            self.InfoDisplay = PhotoImage(data=info)
            PhotoSize =
[self.InfoDisplay.width(),self.InfoDisplay.height()]

            self.DisplayImageCanvas = Canvas(
                self.DisplayImage,
                width=150,
                height=PhotoSize[1] + 15)
            self.DisplayImageCanvas.pack(fill=BOTH, expand=1)


            self.InfoDisplay2 = self.DisplayImageCanvas.create_image(
                PhotoSize[0] / 2 + 10,
                PhotoSize[1] / 2 + 10,
                image=self.InfoDisplay)
            self.InfoDisplay2 = self.DisplayImageCanvas
        except:pass
    # Display as Text
        self.DisplayImageText = Text(
            self.DisplayImage,
            width=70,
            height=30)
        self.DisplayImageText.pack(fill=BOTH, expand=1)

        Decode = b64decode(info)
        self.DisplayImageText.insert(END, Decode)


root = Tk()
app = App(root)
root.mainloop()

#############################################################################




More information about the Python-list mailing list