Видео ролики бесплатно онлайн

Смотреть русское видео

Официальный сайт seoturbina 24/7/365

Смотреть видео бесплатно


digiwhite 19.07.10 06:40 # +1
Еще можно добавить вызов скрипта в Nautilus Actions. Для пущей интеграции так сказать.
pomkalk 19.07.10 07:11 # +1
добавить пункт в контекстное меню nautilus'а

Это и делается с помощью nautilus-actions, если я правильно тебя понял
digiwhite 19.07.10 07:50 # +0
Угу, теперь вижу. По началу было не очивидно :)
solomenikm 19.07.10 13:05 # +0
С CR2 тоже работает? Оригинал оставляет или удаляет?
pomkalk 19.07.10 13:18 # +1
Создаёт файл с таким же именем другого формата. На счет CR2 не знаю, я только на jpg, png, gif и bmp проверял, если python и PIL поддерживает, то да.
ZED 19.07.10 13:25 # +2
Велосипеды изобретаем-с?
http://gnome-look.org/content/show.php/Audio%2BVideo%2BImage%2BText%2BISO+Convert?content=92533&PHPSESSID=e7511928f651e0a23394327a0f1711bb
xT 19.07.10 14:26 # +1
Может кому пригодится
karp 19.07.10 13:55 # +1
В проге можно найти помеченный комментариями блок кода и за комментировать три строчки( знаком # ) Это нужно для того что бы убрать имя конвертируемого изображения с формы, это кому как удобно, что бы форма не растягивалась при длинных именах файлов

Думаю лучше добавить что-то типа:
self.lf.set_ellipsize('PANGO_ELLIPSIZE_END')

Тогда если имя файла будет длинное, то метка обрежется с конца...
Как это в Python не знаю, поэтому уверен, что параметр указан не правильно
karp 19.07.10 14:13 # +1
Вот так:
self.lf.set_ellipsize(pango.ELLIPSIZE_END)
pomkalk 19.07.10 19:45 # +2
self.lf.set_ellipsize(pango.ELLIPSIZE_START)

Что бы конец строки был виден

Код уже подправил...Спасибо
leonike 19.07.10 14:35 # +0
Небольшое замечание, в Python конкатенацию строк лучше осуществлять не через оператор сложения, а следующим образом:
1
2
3

new_val = '%s%s' % (str_val1, str_val2)
 

Подобный код выполняется быстрее, емнип.

Сам писал анологичный скрипт и интегрировал его в Dolphin. Если кому-то надо, могу выложить.
antigluk 19.07.10 15:53 # +0
А есть возможность встраиваться в ту панельку слева, там где папки/эмблемы/etc.?
pomkalk 19.07.10 19:18 # +0
Как слава не знаю, а вот на тулбар в наутилусе галочку одну поставить нужно!
Craftuser 20.07.10 21:43 # +0
Литр пива тебя ждет в моем холодильнике, спасибо. Добавишь опцию изменения размеров (типичные разрешения, просто в два-три-четыре раза уменьшить/увеличить), удвою количество пива.
pomkalk 22.07.10 02:42 # +0
Готово...вот как то так...Чуть попозже еще доработаю...
Craftuser 23.07.10 23:37 # +0
Спасибо.

19.07.10 01:17 pomkalk

PythonПо ВТОРОЙ просьбе Craftuser: Меняем формат изображения прямо в nautilus'е

По просьбе Craftuser «Пиши что-нибудь действительно интересное, типа конвертера изображений, интегрируемого в контекстное меню Nautilus, жду.»

Новый интерфейс — новые возможности. (Сделано без использование Glade что бы обойтись одним файлом)

Я написал программу на python для конвертирования изображения с простейшим PyGTK интерфейсом(На все про все ушло 6 часов)

Что мы имеем

imageconvert.py ImageName — где ImageName имя картинки


Все что нужно, сохранить этот скрипт в файл(У меня называется imageconvert.py) с любым удобным именем, и сохранить в удобном для вас месте.

КОД:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
#!/usr/bin/env python

import os
import sys
import Image
try:
        import pygtk
        pygtk.require("2.0")
        import gtk
except:
        print "Cant load GTK"
        sys.exit(1)

formats=[]
try:
        rc = open(os.path.join(os.environ['HOME'],'.imconvrc'))
        for i in rc.readlines():
                if len(i.strip())>0: formats.append(i.strip())
except:
        formats=['jpg','png','gif','bmp']


class converter():

        rotater = 0
        new_format = None
        sizer = 2

        def make_changes(self,widget,data=None):
                for i in sys.argv[1:]:
                        try:
                                self.im = Image.open(i)
                        except IOError, x:
                                self.msgbox(x)
                                sys.exit(1)
                        except:
                                self.msgbox("FATAL ERROR")
                                sys.exit(1)
                        self.f = os.path.splitext(i)[0]
                        self.r = os.path.splitext(i)[1]
                        self.x,self.y = self.im.size
                        if self.incr.get_active():
                                self.x=self.x*self.sizer
                                self.y=self.y*self.sizer
                                self.im = self.im.resize((self.x,self.y))
                        elif self.decr.get_active():
                                self.x=self.x/self.sizer
                                self.y=self.y/self.sizer
                                self.im = self.im.resize((self.x,self.y))
                        if self.rotater>0:
                                self.im = self.im.rotate(self.rotater)
                        if self.flip_button_lr.get_active():
                                self.im = self.im.transpose(Image.FLIP_LEFT_RIGHT)
                        if self.flip_button_tb.get_active():
                                self.im = self.im.transpose(Image.FLIP_TOP_BOTTOM)
                        if not self.new_format:
                                if self.format_radio_other.get_active():
                                        if len(self.format_entry.get_text())>0:
                                                self.new_format = self.format_entry.get_text()
                                        else:
                                                self.new_format = self.r[1:]
                                else:
                                        self.new_format = self.r[1:]

                        try:
                                self.im.save(self.f+"."+self.new_format)
                        except:
                                if lf==1:
                                        self.msgbox("Cant convert")
                                else:
                                        print "Cant convert"
                                sys.exit(2)
                       


                sys.exit(0)

        def msgbox(self,msg,title="Warning!"):
                self.msgw = gtk.Window(type=gtk.WINDOW_TOPLEVEL)
                self.msgw.set_modal(True)
                self.msgw.set_border_width(5)
                self.msgw.set_position(gtk.WIN_POS_CENTER_ALWAYS)
                self.msgw.set_title(title)
                self.msgw.set_resizable(False)
                self.msgw.connect("delete_event",self.delete_event)
                self.msgb = gtk.VBox(True,10)
                self.msgw.add(self.msgb)
                self.msgl = gtk.Label(msg)
                self.msgb.pack_start(self.msgl,True,True,0)
                self.msgl.show()
                self.msgbb = gtk.HBox(False,0)
                self.msgbb.show()
                self.msgb.pack_start(self.msgbb,True,True,0)           
                self.msgbt = gtk.Button("Exit")
                self.msgbb.pack_end(self.msgbt,True,False,5)
                self.msgbt.connect("clicked",self.delete_event,self.msgw)
                self.msgbt.show()
                self.msgb.show()
                self.msgw.show()
                print msg
                gtk.main()     
       
        def set_resize(self,widget,data):
                self.sizer=data

        def get_image(self,image_name,max_size):
                self.pixbuf = gtk.gdk.pixbuf_new_from_file(image_name)
                self.w,self.h = self.pixbuf.get_width(),self.pixbuf.get_height()               
                if self.w>self.h:
                        self.h=(max_size*self.h)/self.w
                        self.w=max_size
                else:
                        self.w=(max_size*self.w)/self.h
                        self.h=max_size
                self.pixbuf = self.pixbuf.scale_simple(self.w,self.h,gtk.gdk.INTERP_BILINEAR)
                self.im = gtk.Image()
                self.im.set_from_pixbuf(self.pixbuf)
                return self.im

        def set_rotate(self,widget,data):
                self.rotater = data
               

        def flip_check(self,widget,data):
                if data=="lr":
                        if self.flip_button_lr.get_active(): self.flip_button_tb.set_active(False)
                else:
                        if self.flip_button_tb.get_active(): self.flip_button_lr.set_active(False)

        def set_format(self,widget,data):
                if data:
                        self.format_entry.set_editable(False)
                        self.format_entry.set_text("")
                        self.new_format = data
                else:
                        if self.format_radio_none.get_active(): self.new_format=None
                        if self.format_radio_other.get_active():
                                self.format_entry.set_editable(True)   
                        else:
                                self.format_entry.set_text("")
                                self.format_entry.set_editable(False)

        def resize(self,widget,data):
                if widget.get_active():
                        if data=="incr":
                                self.decr.set_active(False)
                        else:
                                self.incr.set_active(False)

        def delete_event(self,widget,event,Data=None):
                gtk.main_quit()
                return False
       
        def run(self):
                self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
                self.window.set_title("Converter")
                self.window.set_border_width(5)
                self.window.set_position(gtk.WIN_POS_CENTER)
                self.window.set_resizable(False)
                self.window.connect("delete_event",self.delete_event)
                self.mainbox = gtk.VBox(False,0)

                self.preview_frame = gtk.Frame("Pre-view")
                self.resize_frame = gtk.Frame("Resize")
                self.flip_frame = gtk.Frame("Flip")
                self.rotate_frame = gtk.Frame("Rotate (Throught left side)")
                self.format_frame = gtk.Frame("New Format")
               
                self.mainbox.pack_start(self.preview_frame,True,True,0)
                self.mainbox.pack_start(self.resize_frame,True,True,0)
                self.mainbox.pack_start(self.flip_frame,True,True,0)
                self.mainbox.pack_start(self.rotate_frame,True,True,0)
                self.mainbox.pack_start(self.format_frame,True,True,0)
                if lf>1:
                        self.preview_content = gtk.Label("Cant preview, because \n"+str(lf)+" images is selected")
                        self.preview_content.set_justify(gtk.JUSTIFY_CENTER)
                else:
                        self.preview_content = self.get_image(sys.argv[1],180)
                self.preview_frame.add(self.preview_content)           
               
                self.resize_t = gtk.Table(2,4,False)
                self.incr = gtk.ToggleButton("Increase")
                self.decr = gtk.ToggleButton("Decrease")
                self.incr.connect("toggled",self.resize,"incr")
                self.decr.connect("toggled",self.resize,"decr")
                self.resize_t.attach(self.incr,0,2,0,1)
                self.resize_t.attach(self.decr,2,4,0,1)
                self.parts=[2,3,4,5]
                self.radio_parts=[]
                for i in xrange(len(self.parts)):
                        if i==0:
                                self.radio_parts.append(gtk.RadioButton(None,"in "+str(self.parts[i])))
                        else:
                                self.radio_parts.append(gtk.RadioButton(self.radio_parts[0],"in "+str(self.parts[i])))
                        self.radio_parts[i].connect("toggled",self.set_resize,self.parts[i])
                        self.resize_t.attach(self.radio_parts[i],i,i+1,1,2)
                self.resize_frame.add(self.resize_t)


                self.flip_box = gtk.HBox(False,0)
                self.flip_button_lr = gtk.ToggleButton("Left - Right")
                self.flip_button_tb = gtk.ToggleButton("Top - Bottom")

                self.flip_box.pack_start(self.flip_button_lr,True,False,0)
                self.flip_box.pack_start(self.flip_button_tb,True,False,0)
                self.flip_frame.add(self.flip_box)

                self.rotate_box = gtk.HBox(True,0)
                self.rotates=[90,180,270]
                self.rotate_radio = gtk.RadioButton(None,"0")
                self.rotate_radio.connect("toggled",self.set_rotate,0)
                self.rotate_box.pack_start(self.rotate_radio,True,True,0)
                for i in self.rotates:
                        self.rotate_radio = gtk.RadioButton(self.rotate_radio,str(i))
                        self.rotate_radio.connect("toggled",self.set_rotate,i)
                        self.rotate_box.pack_start(self.rotate_radio,True,True,0)                      
                self.rotate_frame.add(self.rotate_box)                 

                if lf==1:
                        try:
                                formats.remove(os.path.splitext(sys.argv[1])[1][1:])
                        except:
                                pass
                self.format_box = gtk.VBox(False,0)
                self.format_radio_none = gtk.RadioButton(None,"None")
                self.format_radio_none.connect("toggled",self.set_format,None)
                self.format_box.pack_start(self.format_radio_none,True,False,0)
                for i in formats:
                        self.format_radio = gtk.RadioButton(self.format_radio_none,"to "+i)
                        self.format_radio.connect("toggled",self.set_format,i)
                        self.format_box.pack_start(self.format_radio,True,False,0)
                self.format_radio_other = gtk.RadioButton(self.format_radio_none,"Other -->")
                self.format_radio_other.connect("toggled",self.set_format,None)
                self.format_box.pack_start(self.format_radio_other,True,False,0)
                self.format_other_box = gtk.HBox(False,0)
                self.formal_other_label = gtk.Label("Enter other format: ")
                self.format_entry = gtk.Entry(5)
                self.format_entry.set_size_request(40,self.format_entry.get_size_request()[1])
                self.format_entry.set_editable(False)
                self.format_other_box.pack_start(self.formal_other_label,True,True,0)
                self.format_other_box.pack_start(self.format_entry,True,True,0)
                self.format_box.pack_start(self.format_other_box,True,True,0)
                self.format_frame.add(self.format_box)

                self.control_box = gtk.HBox(False,0)
                self.apply_button = gtk.Button("Apply")
                self.cancel_button = gtk.Button("Cancel")
                self.apply_button.connect("clicked",self.make_changes)
                self.cancel_button.connect("clicked",self.delete_event,self.window)
                self.control_box.pack_start(self.apply_button,False,False,0)
                self.control_box.pack_start(self.cancel_button,True,True,0)
                self.mainbox.pack_start(self.control_box,True,True,0)          
                self.window.add(self.mainbox)          
                self.window.show_all()




if __name__ == "__main__":
        conv = converter()
        lf=len(sys.argv[1:])
        if lf>0:
                for i in sys.argv[1:]:
                        if not os.path.isfile(i):
                                print "This is not file:",i
                                sys.exit(1)
                else:
                        conv.run()
                        gtk.main()
                               
        else:
                conv.msgbox("Need image file")
 


Далее нужно добавить пункт контекстного меню в наутилус.

Для начала нужно установить nautilus-actions(если он не установлен), для этого наберите:

sudo apt-get install nautilus-actions


После установки, запускаем Nautilus Actions Configuration Tool из меню (System → Preferences → Nautilus Actions Configuration) или из командной строки

nautilus-actions-config-tool


  1. В появившемся окне создаем новый Action (Пункт в контекстное миню)

  2. Изменяем Context label на ваше название пункта в контекстном меню, и устанавливаем иконку в поле icon(на свое усмотрение)

  3. Во вкладке «Command» устанавливаем поля path(Путь к программе) и поле parameters, которое должно быть %M, для того чтобы к программе подставился единственный параметр — полный путь выделенной картинки.

  4. Во вкладке «Conditions» меняем значение filenames на «*.jpg;*.png;*.gif;*.bmp» + можно продолжить список интересующими вас форматами, а также снимаем галочку с Match Case(Что бы не было привязки к регистру)

  5. Жмем сохранить и готово



Иногда бывает так что пункт меню не появляется для указанных в Conditions → filenames форматов, мне помогло удаление пробелов между форматами

Ну и можно перезагрузить nautilus командой

nautilus -q



Дополнительные возможности

К дополнительным возможностям можно отнести возможность создания .imconvrc в корневом каталоге, что это значит, это значит что список форматов будет загружаться от туда(Главное помнить, что если файл пустой, список форматов не выведется, тогда для корректного отображения следует удалить файл).

Если файла нет используется стандартный набор форматов ['jpg','png','gif','bmp']

.imconvrc имеет вид
1
2
jpg
gif

где каждый формат с новой строки


Может конвертировать несколько файлов одновременно(multiselect). а также изменять размер, отражать по вертикали и горизонтали, крутить(Против часовой стрелки) ижображение(я)

Внимание! Если картинка с таким именем существует,то перезаписывает, если сохранять в другом формате(которого в данной папке нет) создается новый(мне показалось что так будет удобней) но если нужно подправлю что бы сохранял отдельно!


Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 159)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 3279 из 235 городов)
            Топ пользователей Топ блогов
            В сети: doraneko, dimlight, knicefire

            Новенькие: Mad_Hat, satagik, ZeroOne, h1nt, damirsuperboy
            welinux.ru

            Смотреть онлайн бесплатно

            Онлайн видео бесплатно


            Смотреть русское с разговорами видео

            Online video HD

            Видео скачать на телефон

            Русские фильмы бесплатно

            Full HD video online

            Смотреть видео онлайн

            Смотреть HD видео бесплатно

            School смотреть онлайн