def _optimize_image(self, src_path, json_path, js_path): """Begins tasks to identify, optimize, and write metadata for a single input image. Args: src_path: Source path to an image file. json_path: JSON file output path. js_path: JS file output path. Returns: A list of Deferreds for all image tasks. """ ds = [] rel_src_path = anvil.util.strip_build_paths( os.path.relpath(src_path, self.build_env.root_path)) rel_json_path = anvil.util.strip_build_paths( os.path.relpath(json_path, self.build_env.root_path)) # TODO(benvanik): want to split this into tasks: # - IdentifyImageTask: read metadata, decide what to do # - *ExecutionTask[]: various conversions (if required) # - Gather back, write metadata # TODO(benvanik): identify in a task (width, height, channels) = self._identify_image(src_path) # TODO(benvanik): encode? drop invalid name things? (whitespace/etc) class_name = os.path.splitext(os.path.basename(src_path))[0] # TODO(benvanik): proper image info construction class Image(object): pass image = Image() image.class_name = '%s.%s' % (self.rule.namespace, class_name) image.friendly_name = class_name image.src_path = rel_src_path image.base_path = ensure_forwardslashes( os.path.dirname(rel_src_path)) image.json_path = ensure_forwardslashes(rel_json_path) image.width = width image.height = height image.channels = channels image.slot_size = \ self.rule.slot_size.split('x') if self.rule.slot_size else None # TODO(benvanik) proper mime type mime_type = { '.png': 'image/png', '.jpg': 'image/jpeg', '.gif': 'image/gif', '.webp': 'image/webp', }[os.path.splitext(src_path)[1]] class ImageLod(object): pass lod0 = ImageLod() lod0.type = mime_type lod0.path = ensure_forwardslashes(os.path.basename(src_path)) lod0.size = os.path.getsize(src_path) image.lod_list = [ [ lod0, ], ] # TODO(benvanik): optimize, instead of just copying source self._append_output_paths([src_path]) (json_template, js_template) = _get_template_paths() # Generate JSON ds.append( self._run_task_async( MakoTemplateTask(self.build_env, json_path, json_template, { 'image': image, }))) # Generate JS ds.append( self._run_task_async( MakoTemplateTask(self.build_env, js_path, js_template, { 'image': image, }))) return ds
def _optimize_image(self, src_path, json_path, js_path): """Begins tasks to identify, optimize, and write metadata for a single input image. Args: src_path: Source path to an image file. json_path: JSON file output path. js_path: JS file output path. Returns: A list of Deferreds for all image tasks. """ ds = [] rel_src_path = anvil.util.strip_build_paths( os.path.relpath(src_path, self.build_env.root_path)) rel_json_path = anvil.util.strip_build_paths( os.path.relpath(json_path, self.build_env.root_path)) # TODO(benvanik): want to split this into tasks: # - IdentifyImageTask: read metadata, decide what to do # - *ExecutionTask[]: various conversions (if required) # - Gather back, write metadata # TODO(benvanik): identify in a task (width, height, channels) = self._identify_image(src_path) # TODO(benvanik): encode? drop invalid name things? (whitespace/etc) class_name = os.path.splitext(os.path.basename(src_path))[0] # TODO(benvanik): proper image info construction class Image(object): pass image = Image() image.class_name = '%s.%s' % (self.rule.namespace, class_name) image.friendly_name = class_name image.src_path = rel_src_path image.base_path = ensure_forwardslashes(os.path.dirname(rel_src_path)) image.json_path = ensure_forwardslashes(rel_json_path) image.width = width image.height = height image.channels = channels image.slot_size = \ self.rule.slot_size.split('x') if self.rule.slot_size else None # TODO(benvanik) proper mime type mime_type = { '.png': 'image/png', '.jpg': 'image/jpeg', '.gif': 'image/gif', '.webp': 'image/webp', }[os.path.splitext(src_path)[1]] class ImageLod(object): pass lod0 = ImageLod() lod0.type = mime_type lod0.path = ensure_forwardslashes(os.path.basename(src_path)) lod0.size = os.path.getsize(src_path) image.lod_list = [ [lod0,], ] # TODO(benvanik): optimize, instead of just copying source self._append_output_paths([src_path]) (json_template, js_template) = _get_template_paths() # Generate JSON ds.append(self._run_task_async(MakoTemplateTask( self.build_env, json_path, json_template, { 'image': image, }))) # Generate JS ds.append(self._run_task_async(MakoTemplateTask( self.build_env, js_path, js_template, { 'image': image, }))) return ds