<img src='/path/to/image.jpg' width: 100px height:150px>
path/to/100x150/image.jpg
path/to/100x150/image.jpg
. To set nginx on such paths, if there is no picture, then resize and save. (script)getImage(100,150,'image.jpg')
that will check for the presence of the image and, if it is not there, remove the original and produce the desired path. /tmp/ /origin/ /crop/100x150/ /crop/200x300/
tmp/temp_file
saves the last timestamp of the change. # -*- coding: utf-8 -*- import logging import time import os import re from daemon import runner from sets import Set _PATH = os.path.abspath(os.path.dirname(__file__)) LOG_PATH = os.path.abspath(os.path.join(_PATH, '../', 'files', 'logs')) PID_PATH = os.path.abspath(os.path.join(_PATH, '../', 'files', 'tmp')) class Azazel(): ''' , . origin ( ) - 000x000 crop add_sync_folders origin_folder - sync_folder add_sync_folders - pidfile_path - pid file_save_last_sync_data LOG_PATH - PID_PATH - pid ''' # sync_folder = os.path.abspath( os.path.join(_PATH, '../', 'files', 'media', 'crop')) # # file_save_last_sync_data = PID_PATH + "/last_update" # , # origin_folder = os.path.abspath( os.path.join(_PATH, '../', 'files', 'media', 'origin')) # , # add_sync_folders = [ os.path.abspath(os.path.join(_PATH, '../', 'files', 'tmp', '100x100')), ] pidfile_path = PID_PATH + '/azazel.pid' stdin_path = '/dev/null' stdout_path = '/dev/tty' stderr_path = '/dev/tty' pidfile_timeout = 5 def __init__(self): self.last_time_update = self.get_last_sync_date() def get_last_update_origin_folder(self): ''' ''' last_update = str(os.path.getmtime(self.origin_folder)) return last_update def set_last_update(self, time): ''' ''' # self.last_time_update = time # f = open(self.file_save_last_sync_data, 'w') f.write(str(time)) f.close() def get_last_sync_date(self): ''' ''' f = open(self.file_save_last_sync_data, 'r') last_sync = f.read() f.close() return last_sync def get_folders_to_sync(self): ''' , . dir ( ) (-, - ) 000x000 ''' folders = map( lambda folder_name: self.sync_folder + '/' + folder_name, os.listdir(self.sync_folder)) + self.add_sync_folders logger.info("folders list:" + str(folders)) return filter( lambda folder: re.match('^\d{,4}x\d{,4}$', folder.split('/')[-1]), folders) def folder_sync(self, folder): ''' . , , - , ''' logger.info(" :" + folder) # folder_image_list = os.listdir(folder) # origin_image_list folder_image_list new_files = Set(self.origin_image_list) - Set(folder_image_list) logger.info(" :" + str(new_files)) # for file_to_sync in new_files: # size = folder.split('/')[-1] command = 'convert "%s" -resize %s "%s"' % ( self.origin_folder + '/' + file_to_sync, size, folder + '/' + file_to_sync, ) logger.info(command) result = os.system(command) logger.info(result) # folder_image_list origin_image_list delte_files = Set(folder_image_list) - Set(self.origin_image_list) logger.info(" :" + str(delte_files)) # for file_to_sync in delte_files: logger.info('delete ' + folder + '/' + file_to_sync) os.remove(folder + '/' + file_to_sync) def sunc_folders(self): ''' ''' # self.origin_image_list = os.listdir(self.origin_folder) # for folder in self.get_folders_to_sync(): self.folder_sync(folder) def run(self): logger.info("start daemon azazel") self.sunc_folders() while True: last_update = self.get_last_update_origin_folder() if self.last_time_update < last_update: logger.info(" ") self.sunc_folders() self.set_last_update(last_update) time.sleep(10) daemon = Azazel() logger = logging.getLogger("DaemonLog") logger.setLevel(logging.DEBUG) formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") handler = logging.FileHandler(LOG_PATH + "/azazel.log") handler.setFormatter(formatter) logger.addHandler(handler) daemon_runner = runner.DaemonRunner(daemon) daemon_runner.daemon_context.files_preserve = [handler.stream] daemon_runner.do_action()
Source: https://habr.com/ru/post/154567/
All Articles