
рд╢реБрдн рджреЛрдкрд╣рд░
рдкреГрд╖реНрдарднреВрдорд┐:
рдХрд┐рд╕реА рддрд░рд╣, рдПрдХ рдЙрдкрд╡рд╛рд╕ рджрд┐рди рдХрд╛рдо рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛, рдЗрд╕рд▓рд┐рдП рдКрдм рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЪрд╛рд░ рдореЗрд░реЗ рд╕рд┐рд░ рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛ред рдЧрдВрднреАрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ, рдмрд╕ рдЙрджрд╛рддреНрдд рдкрд╛рда 2 рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╢рдВрд╕рдХ рдкреНрд▓рдЧрдЗрдиред рдЬреЛ рдХреЛрдб рдХреЛ рдмрдЪрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╡реЗрдмрдХреИрдо рдХреЛ рд╢реВрдЯ рдХрд░реЗрдЧрд╛ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреЛрдб рдХреЛ рд╣реАред
рдЪреЗрддрд╛рд╡рдиреА:
рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рддреБрд░рдВрдд рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдкреНрд░рд┐рдп рдкрд╛рдардХ, рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЕрдЬрдЧрд░ рдХреЛ рдЫреБрдЖ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рджреЗрдЦрд╛ рдерд╛ред рдореИрдВ рдпрд╣ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рда рдореЗрдВ рд╡реНрдпрд╛рдХрд░рдгрд┐рдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдЖрдкрд╕реЗ рдорд╛рдлреА рдорд╛рдВрдЧрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ , рдмрд▓реНрдХрд┐ рдореЗрд▓ (shcoder.alex@gmail.com) рдкрд░ рдпрд╛ рдкреАрдПрдо рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВред рдпрд╣ рдкреНрд▓рдЧрдЗрди рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрдкрдпреЛрдЧ рдФрд░ рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛редрдЖрдЬ рдмрд┐рдирд╛ рдкрд╛рдиреА рдХреЗредрд╡рд┐рдЪрд╛рд░:
рдкреНрд▓рдЧ-рдЗрди, рдкреНрд░рддреНрдпреЗрдХ N (рд╕реМрд╡реЗрдВ) рдкрд░ рд╕реЗрд╡ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рд╕реНрдХреНрд░реАрди рд╕реНрдХреНрд░реАрди рдФрд░ рд╡реЗрдмрдХреИрдо рд╕реЗ рдПрдХ рдлреЛрдЯреЛ рдмрдирд╛рддрд╛ рд╣реИред
рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рдлреЗрдВрдХреЗрдВ рдФрд░ рд╕рдЯреАрдХ рддрд╛рд░реАрдЦ рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдирд╛рдо рджреЗрдВредрд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП:
рдХреЛрдИ рднреА рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг - рдЕрдлрд╕реЛрд╕, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ (рдкреНрд░рд╢реНрди рдореЗрдВ рдореИрдХ)
рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реНрдЯреНрд░реАрдорд░ - рдПрдХ рд╡реЗрдмрдХреИрдо рд╕реЗ рдЪрд┐рддреНрд░ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП
ImageMagick - рд╕рдм-рд▓рд╛рдЗрдо рд╕реЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдПрдХреЛрдб рд╣реАimport sublime, sublime_plugin, os,time, commands from datetime import datetime, timedelta class FaceCodeCommand(sublime_plugin.EventListener): def __init__(self): self.cnt = 0 self.settings = sublime.load_settings("FaceCode.sublime-settings") self.facecode = self.settings.get("facecode") self.time_format = self.settings.get("time_format") self.img_format = self.settings.get("img_format") self.path_photo = self.settings.get("path_save_photo") self.path_screen = self.settings.get("path_save_screen") self.device = self.settings.get("device") self.count_save = self.settings.get("count_save") self.filename = self.get_file_name() self.check_folder() def on_pre_save(self, view): if self.facecode: if self.cnt % self.count_save == 0: self.save_photo() self.save_screen() self.cnt += 1 def check_folder(self): if not os.path.exists(self.path_photo) and self.path_photo: os.mkdir(self.path_photo, 0777) if not os.path.exists(self.path_screen) and self.path_screen: os.mkdir(self.path_screen, 0777) return def get_file_name(self): dt = datetime.now() ds = str(dt.strftime(self.time_format)) return ds+"."+self.img_format def save_photo(self): os.system("streamer -c "+self.device+" -o "+self.path_photo+self.filename) return def save_screen(self): win_id = commands.getoutput( 'xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | awk \'{print $5}\'' ) os.system("import -window "+win_id+" "+self.path_screen+self.filename) return
рдкрд░рд┐рдгрд╛рдо:
рдореБрдЭреЗ рд╡рд╣реА рдорд┐рд▓рд╛ рдЬреЛ рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдереАред рдореИрдВрдиреЗ рдПрдХ "рднрдпрд╛рдирдХ" рдЕрдЬрдЧрд░ рджреЗрдЦрд╛ - рдЕрдиреБрднрд╡ рд╕рдм рдХреЗ рдмрд╛рджред
рдЙрджрд╛рд╣рд░рдг
рд╕реНрдХреНрд░реАрди рд╕реНрдХреНрд░реАрди
рд╡реЗрдм рдХреИрдорд░рд╛ рдлреЛрдЯреЛрдЬреАрдердм рдкреНрд▓рдЧрдЗрдирдкрд░рд┐рдгрд╛рдо
GIF (рдзреНрдпрд╛рди 12 рдПрдордмреА - 800+ рдлреНрд░реЗрдо)
рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдХрд╛рдо рдкрд░ рдЧрдпрд╛ред
PS рд╕реБрдзрд╛рд░ рдФрд░ рдкреНрд▓рдЧрдЗрди рдкрд░ рд╕реБрдзрд╛рд░ рд╕реНрд╡рд╛рдЧрдд рд╣реИред