extractimage.py revision e4a094fa5446f7e5e226a3b10fdb7bf676808863
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh#!/usr/bin/env python
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh'''
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshCopyright (C) 2005 Aaron Spike, aaron@ekips.org
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshThis program is free software; you can redistribute it and/or modify
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshit under the terms of the GNU General Public License as published by
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshthe Free Software Foundation; either version 2 of the License, or
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh(at your option) any later version.
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshThis program is distributed in the hope that it will be useful,
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshbut WITHOUT ANY WARRANTY; without even the implied warranty of
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshGNU General Public License for more details.
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshYou should have received a copy of the GNU General Public License
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshalong with this program; if not, write to the Free Software
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh'''
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh# standard library
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshimport base64
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshimport os
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh# local library
3711b3e25395437ee0a09dbbb2a76d999c4ef322mikloshimport inkex
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshinkex.localize()
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshclass MyEffect(inkex.Effect):
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh def __init__(self):
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh inkex.Effect.__init__(self)
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh self.OptionParser.add_option("--desc")
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh self.OptionParser.add_option("--filepath",
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh action="store", type="string",
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh dest="filepath", default=None,
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh help="")
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh def effect(self):
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh mimesubext={
fba63a357654d8b3e84c60007e40aa698cd45d19miklosh 'png' :'.png',
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh 'bmp' :'.bmp',
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh 'jpeg':'.jpg',
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh 'jpg' :'.jpg', #bogus mime
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh 'icon':'.ico',
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh 'gif' :'.gif'
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh }
dc4f69a188c203f2fdc65f22d0d57904a8c52dd7miklosh
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh # exbed the first embedded image
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh path = self.options.filepath
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh if (path != ''):
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh if (self.options.ids):
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh for id, node in self.selected.iteritems():
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh if node.tag == inkex.addNS('image','svg'):
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh xlink = node.get(inkex.addNS('href','xlink'))
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh if (xlink[:4]=='data'):
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh comma = xlink.find(',')
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh if comma>0:
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh #get extension
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh fileext=''
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh semicolon = xlink.find(';')
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh if semicolon>0:
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh for sub in mimesubext.keys():
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh if sub in xlink[5:semicolon].lower():
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh fileext=mimesubext[sub]
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh path=path+fileext;
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh if (not os.path.isabs(path)):
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh if os.name == 'nt':
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh path = os.path.join(os.environ['USERPROFILE'],path)
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh else:
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh path = os.path.join(os.path.expanduser("~"),path)
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh inkex.errormsg(_('Image extracted to: %s') % path)
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh break
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh #save
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh data = base64.decodestring(xlink[comma:])
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh open(path,'wb').write(data)
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh node.set(inkex.addNS('href','xlink'),os.path.realpath(path)) #absolute for making in-mem cycles work
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh else:
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh inkex.errormsg(_('Unable to find image data.'))
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh break
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
68664e00e2372534b4df2fdc5f54f836bafece18mikloshif __name__ == '__main__':
1cda9431ef400135f5e1bd899a94b921bdad0eafmiklosh e = MyEffect()
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh e.affect()
68664e00e2372534b4df2fdc5f54f836bafece18miklosh
dc4f69a188c203f2fdc65f22d0d57904a8c52dd7miklosh
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 fileencoding=utf-8 textwidth=99
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh