mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-31 03:10:07 +00:00 
			
		
		
		
	added cache builder script...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									cb0b9d1fc7
								
							
						
					
					
						commit
						7f164c25bd
					
				| @ -34,6 +34,8 @@ Priority work | ||||
| 					[_] directory lister | ||||
| 				[X] basic test | ||||
| 				[X] disable transitions... | ||||
| 		[_] load sorted images from JSON data | ||||
| 		| curently the sort is as in file... | ||||
| 		[_] load higher resolution images OVER lower res to avoid "blackouts" | ||||
| 		| plus, might be good to keep the low-res versions loaded... | ||||
| 		| | ||||
|  | ||||
							
								
								
									
										136
									
								
								ui/buildcache.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										136
									
								
								ui/buildcache.py
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,136 @@ | ||||
| #======================================================================= | ||||
| 
 | ||||
| __version__ = '''0.0.01''' | ||||
| __sub_version__ = '''20120922031956''' | ||||
| __copyright__ = '''(c) Alex A. Naanou 2012''' | ||||
| 
 | ||||
| 
 | ||||
| #----------------------------------------------------------------------- | ||||
| 
 | ||||
| import os | ||||
| import Image | ||||
| import json | ||||
| 
 | ||||
| from pli.logictypes import OR | ||||
| 
 | ||||
| 
 | ||||
| #----------------------------------------------------------------------- | ||||
| # TODO: | ||||
| # 	- load config from file... | ||||
| # 	- accept a path on command-line | ||||
| # 	- default path is cwd | ||||
| # | ||||
| #----------------------------------------------------------------------- | ||||
| 
 | ||||
| config = { | ||||
| 	'cache-structure': { | ||||
| 		# XXX make these as close to standard as possible and keep | ||||
| 		# 	  sane distances... | ||||
| 		'150px': '.ImageGridCache/150px/', | ||||
| 		'350px': '.ImageGridCache/350px/', | ||||
| 		'900px': '.ImageGridCache/900px/', | ||||
| 		'1080px': '.ImageGridCache/1080px/', | ||||
| 		'1920px': '.ImageGridCache/1920px/', | ||||
| 	}, | ||||
| 	'sizes': { | ||||
| 		'150px': 150, | ||||
| 		'350px': 350, | ||||
| 		'900px': 900, | ||||
| 		'1080px': 1080, | ||||
| 		'1920px': 1920, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| images = { | ||||
| 	'position': 0, | ||||
| 	'ribbons':[ | ||||
| 		{} | ||||
| 	] | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| IMAGE_EXT = OR(*( | ||||
| 		'.jpg', '.jpeg', '.JPG', '.JPEG', | ||||
| )) | ||||
| 
 | ||||
| 
 | ||||
| #----------------------------------------------------------------------- | ||||
| 
 | ||||
| # return list of paths ending in a pattern... | ||||
| def build_cache_dirs(path, config=config): | ||||
| 	''' | ||||
| 	''' | ||||
| 	dirs = config['cache-structure'] | ||||
| 	for _, k in dirs.items(): | ||||
| 		p = os.path.join(path, k) | ||||
| 		if not os.path.exists(p): | ||||
| 			os.makedirs(p) | ||||
| 
 | ||||
| 
 | ||||
| # XXX this will not overwrite existing files... | ||||
| def make_cache_images(path, config=config): | ||||
| 	''' | ||||
| 	''' | ||||
| 	dirs = config['cache-structure'] | ||||
| 	sizes = config['sizes']  | ||||
| 	n = 0 | ||||
| 
 | ||||
| 	for name in os.listdir(path): | ||||
| 		# skip non-images... | ||||
| 		iid, ext = os.path.splitext(name) | ||||
| 		if ext != IMAGE_EXT: | ||||
| 			continue | ||||
| 		print '.', | ||||
| 		n += 1 | ||||
| 		i = images['ribbons'][0][iid] = { | ||||
| 			'id': iid, | ||||
| 			'preview': {}, | ||||
| 		} | ||||
| 		img = Image.open(os.path.join(path, name)) | ||||
| 		# add original image to struct... | ||||
| 		i['preview'][str(max(*img.size)) + 'px'] = os.path.join(path, name) | ||||
| 		# previews... | ||||
| 		for k, spec in sizes.items(): | ||||
| 			p = os.path.join(path, dirs[k], name) | ||||
| 			# do not upscale images... | ||||
| 			if max(*img.size) <= spec: | ||||
| 				continue | ||||
| 			# add image to index... | ||||
| 			i['preview'][str(spec) + 'px'] = p | ||||
| 			if not os.path.exists(p): | ||||
| 				scale = spec/float(max(*img.size)) | ||||
| 				preview = img.resize((int(img.size[0]*scale), int(img.size[1]*scale)), Image.ANTIALIAS) | ||||
| 				preview.save(p) | ||||
| 				##!!! metadata??? | ||||
| 				##!!! | ||||
| 		i['preview'][str(spec) + 'px'] = p | ||||
| 	images['position'] = images['ribbons'][0].keys()[0] | ||||
| 	with open(os.path.join(path, '.ImageGridCache.json'), 'w') as f: | ||||
| 		json.dump(images, f, indent=4) | ||||
| 	##!!! STUB... | ||||
| 	return n | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #----------------------------------------------------------------------- | ||||
| if __name__ == '__main__': | ||||
| 	PATH = 'images/cache-test/' | ||||
| 
 | ||||
| 	import time | ||||
| 
 | ||||
| 	t0 = time.time() | ||||
| 
 | ||||
| 	build_cache_dirs(PATH) | ||||
| 
 | ||||
| 	n = make_cache_images(PATH) | ||||
| 
 | ||||
| 	t1 = time.time() | ||||
| 
 | ||||
| 	print | ||||
| 	print 'Processed %s images in %s seconds.' % (n, t1-t0) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #======================================================================= | ||||
| #                                            vim:set ts=4 sw=4 nowrap : | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user