Code

GNU/Linux!
[inkscape.git] / share / extensions / extractimage.py
index f1b0f6f7a246f2b1e8a29d1ff468690aa7c92bff..38f9298465d66191fd3eb9718dd08fb5f8a0c21c 100644 (file)
@@ -17,34 +17,58 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 '''
 
-import inkex, base64
+import inkex, base64, os
+import gettext
+_ = gettext.gettext
 
 class MyEffect(inkex.Effect):
     def __init__(self):
         inkex.Effect.__init__(self)
+        self.OptionParser.add_option("--desc")
         self.OptionParser.add_option("--filepath",
                         action="store", type="string", 
                         dest="filepath", default=None,
                         help="")
     def effect(self):
-        ctx = inkex.xml.xpath.Context.Context(self.document,processorNss=inkex.NSS)
+        mimesubext={
+            'png' :'.png',
+            'bmp' :'.bmp',
+            'jpeg':'.jpg',
+            'jpg' :'.jpg', #bogus mime
+            'icon':'.ico',
+            'gif' :'.gif'
+        }
         
         # exbed the first embedded image
         path = self.options.filepath
         if (path != ''):
             if (self.options.ids):
                 for id, node in self.selected.iteritems():
-                    if node.tagName == 'image':
-                        xlink = node.attributes.getNamedItemNS(inkex.NSS[u'xlink'],'href')
-                        if (xlink.value[:4]=='data'):
-                            comma = xlink.value.find(',')
+                    if node.tag == inkex.addNS('image','svg'):
+                        xlink = node.get(inkex.addNS('href','xlink'))
+                        if (xlink[:4]=='data'):
+                            comma = xlink.find(',')
                             if comma>0:
-                                data = base64.decodestring(xlink.value[comma:])
+                                #get extension
+                                fileext=''
+                                semicolon = xlink.find(';')
+                                if semicolon>0:
+                                    for sub in mimesubext.keys():
+                                        if sub in xlink[5:semicolon]:
+                                            fileext=mimesubext[sub]
+                                            path=path+fileext;
+                                            break
+                                #save
+                                data = base64.decodestring(xlink[comma:])
                                 open(path,'wb').write(data)
-                                xlink.value = path
+                                node.set(inkex.addNS('href','xlink'),os.path.realpath(path)) #absolute for making in-mem cycles work
                             else:
-                                inkex.debug('Difficulty finding the image data.')
+                                inkex.errormsg(_('Difficulty finding the image data.'))
                             break
 
-e = MyEffect()
-e.affect()
+if __name__ == '__main__':
+    e = MyEffect()
+    e.affect()
+
+
+# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 encoding=utf-8 textwidth=99