diff options
author | flavio <fdanesse@gmail.com> | 2012-03-08 21:58:15 (GMT) |
---|---|---|
committer | flavio <fdanesse@gmail.com> | 2012-03-08 21:58:15 (GMT) |
commit | 95a35b1cdd534bddcc584debd91dc4fc0a71db34 (patch) | |
tree | 56940f962aa84948a9cae90b6b54dcea9802082f /JAMediaImagenes.py | |
parent | 0846929120274b02be668e21fc19228f49c2b0ae (diff) |
update 8-3-12
Diffstat (limited to 'JAMediaImagenes.py')
-rw-r--r-- | JAMediaImagenes.py | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/JAMediaImagenes.py b/JAMediaImagenes.py new file mode 100644 index 0000000..04856b4 --- /dev/null +++ b/JAMediaImagenes.py @@ -0,0 +1,216 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# JAMediaImagenes.py por: +# Flavio Danesse <fdanesse@gmail.com> +# CeibalJAM! - Uruguay + +import time, os, gtk, pygtk, gobject, gst, pygst, sys, time, commands +from gettext import gettext as _ + +from toolbar import ViewToolbar, EditToolbar +from ImageProcess import ImageProcessor + +DIRECTORIO_BASE= os.path.dirname(__file__) +ICONOS= os.path.join(DIRECTORIO_BASE, "iconos/") + +class JAMediaImagenes(gtk.Window): + def __init__(self): + gtk.Window.__init__(self) + self.set_title("JAMedia Imágenes") + self.set_icon_from_file(os.path.join(ICONOS,"JAMediaImagenes.png")) + self.set_resizable(True) + self.set_size_request( 800, 600 ) + self.set_position(gtk.WIN_POS_CENTER) + #self.modify_bg(gtk.STATE_NORMAL, MG.BACKGROUND) + + self.view = None + + self.layout() + + self.connect("delete_event", self.delete_event) + + def layout(self): + caja = gtk.VBox() + self.view = ImageProcessor() + sw = gtk.ScrolledWindow() + sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + sw.add_with_viewport(self.view) + + view_toolbar = ViewToolbar() + view_toolbar.connect('abrir_archivo', self.abrir_archivo) + view_toolbar.connect('guardar_archivo', self.guardar_archivo) + view_toolbar.connect('zoom_in', self.zoom_in) + view_toolbar.connect('zoom_out', self.zoom_out) + view_toolbar.connect('zoom_to_fit', self.zoom_tofit) + view_toolbar.connect('rotate_clockwise', self.rotate_anticlockwise) + view_toolbar.connect('rotate_anticlockwise', self.rotate_clockwise) + view_toolbar.connect('undo', self.undo) + view_toolbar.connect('redo', self.redo) + view_toolbar.connect('cam_cb',self.fotografiar) + view_toolbar.show() + edit_toolbar = EditToolbar() + edit_toolbar.connect('grey', self.view.grey) + edit_toolbar.connect('blur', self.view.image_Blur) + edit_toolbar.connect('transpose', self.view.image_Transpose) + edit_toolbar.connect('contour', self.view.image_Contour) + edit_toolbar.connect('finedges', self.view.image_Finedges) + edit_toolbar.connect('solarize', self.view.image_Solarize) + edit_toolbar.connect('invert', self.view.image_Invert) + edit_toolbar.connect('ambross', self.view.image_Ambross) + edit_toolbar.connect('sharpen', self.view.image_Sharpen) + edit_toolbar.show() + + for toolbar in [view_toolbar, edit_toolbar]: + caja.pack_start(toolbar, False, False, 0) + caja.pack_start(sw, True, True, 0) + + self.add(caja) + self.show_all() + + def delete_event(self, widget, event, data=None): + sys.exit(0) + return False + + def fotografiar(self, button): + archivo = "/tmp/photo.jpg" + #photocmd = "v4l2src ! ffmpegcolorspace ! jpegenc ! filesink location=%s" % (archivo) + #pipeline = gst.parse_launch (photocmd) + #pipeline.set_state(gst.STATE_PLAYING) + #time.sleep(3) + #pipeline.set_state(gst.STATE_NULL) + comando= 'gst-launch-0.10 v4l2src ! ffmpegcolorspace ! pngenc ! filesink location=%s' % (archivo) + commands.getoutput(comando) + self.view.set_pixbuf( gtk.gdk.pixbuf_new_from_file(archivo) ) + + def undo(self, button): + self.view.image_undo() + + def redo(self, button): + self.view.image_redo() + + def zoom_in(self, button): + self.view.zoom_in() + + def zoom_out(self, button): + self.view.zoom_out() + + def zoom_tofit(self, button): + self.view.set_zoom(1) + + def rotate_anticlockwise(self, button): + self.view.set_angulo(-1) + + def rotate_clockwise(self, button): + self.view.set_angulo(1) + + def abrir_archivo(self, button): + selector = Selector_de_Archivos(self) + selector.connect('abrir_archivo', self.load) + + def guardar_archivo(self, button): + if not self.view.pixbufs_stack: return + selector = Selector_de_Directorio(self) + selector.connect('guardar_archivo', self.save) + + def load(self, widget= None, senial= None): + self.view.set_pixbuf( gtk.gdk.pixbuf_new_from_file(senial) ) + + def save(self, widget= None, senial= None): + self.view.guardar_archivo(senial) + +class Selector_de_Archivos (gtk.FileChooserDialog): + __gsignals__ = {'abrir_archivo': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([gobject.TYPE_STRING,]))} + def __init__(self, ventana): + gtk.FileChooserDialog.__init__(self, title= "Abrir Archivos de Imágenes", parent=ventana, + action=gtk.FILE_CHOOSER_ACTION_OPEN) + self.set_default_size( 640, 480 ) + self.resize( 640, 480 ) + self.set_select_multiple(False) + + # extras + hbox = gtk.HBox() + boton_abrir = gtk.Button("Abrir") + boton_salir = gtk.Button("Salir") + hbox.pack_end(boton_salir, True, True, 5) + hbox.pack_end(boton_abrir, True, True, 5) + self.set_extra_widget(hbox) + + filter = gtk.FileFilter() + filter.set_name("Imagenes") + filter.add_mime_type("image/*") + self.add_filter(filter) + + # Callbacks + boton_salir.connect("clicked", self.salir) + boton_abrir.connect("clicked",self.abrir) + + self.show_all() + self.resize( 640, 480 ) + + def abrir(self, widget): + archivo = self.get_filename() + if not archivo: return self.salir(None) + if os.path.exists(archivo): + if os.path.isfile(archivo): + self.emit('abrir_archivo', archivo) + self.salir(None) + + def salir(self, widget): + self.destroy() + +class Selector_de_Directorio (gtk.FileChooserDialog): + __gsignals__ = {'guardar_archivo': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([gobject.TYPE_STRING,]))} + def __init__(self, ventana): + gtk.FileChooserDialog.__init__(self, title= "Guardar Imagen", parent=ventana, + action=gtk.FILE_CHOOSER_ACTION_SAVE) + self.set_default_size( 640, 480 ) + self.resize( 640, 480 ) + + # extras + hbox = gtk.HBox() + boton_abrir = gtk.Button("Guardar") + boton_salir = gtk.Button("Salir") + hbox.pack_end(boton_salir, True, True, 5) + hbox.pack_end(boton_abrir, True, True, 5) + self.set_extra_widget(hbox) + + filter = gtk.FileFilter() + filter.set_name("Imagenes") + filter.add_mime_type("image/*") + self.add_filter(filter) + + # Callbacks + boton_salir.connect("clicked", self.salir) + boton_abrir.connect("clicked",self.guardar) + + self.show_all() + self.resize( 640, 480 ) + + def guardar(self, widget): + archivo = self.get_filename() + if not archivo: return self.salir(None) + self.emit('guardar_archivo', archivo) + self.salir(None) + + def salir(self, widget): + self.destroy() + + +if __name__=="__main__": + JAMediaImagenes() + gtk.main() |