mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-11-03 04:40:10 +00:00 
			
		
		
		
	
		
			
	
	
		
			133 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			133 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								#=======================================================================
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__version__ = '''0.0.01'''
							 | 
						||
| 
								 | 
							
								__sub_version__ = '''20111015034511'''
							 | 
						||
| 
								 | 
							
								__copyright__ = '''(c) Alex A. Naanou 2011'''
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#-----------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import os
							 | 
						||
| 
								 | 
							
								import shutil
							 | 
						||
| 
								 | 
							
								import Image
							 | 
						||
| 
								 | 
							
								import tempfile
							 | 
						||
| 
								 | 
							
								import pyexiv2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import tags
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#-----------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INPUT_PATH = r'L:\mnt\hdd9 (photo)\NTFS2\work\ImageGrid\staging\input'
							 | 
						||
| 
								 | 
							
								ARCHIVE_PATH = r'L:\mnt\hdd9 (photo)\NTFS2\work\ImageGrid\staging\archive'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								THUMB_SIZE = 200
							 | 
						||
| 
								 | 
							
								PREVIEW_SIZE = 900
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HIRES_DIR = 'hires'
							 | 
						||
| 
								 | 
							
								THUMBS_DIR = 'thumb'
							 | 
						||
| 
								 | 
							
								PREVIEW_DIR = 'preview'
							 | 
						||
| 
								 | 
							
								TMP_DIR = 'tmp'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#-----------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def setup_archive(path):
							 | 
						||
| 
								 | 
							
									'''
							 | 
						||
| 
								 | 
							
									build directory tree and setup initial data.
							 | 
						||
| 
								 | 
							
									'''
							 | 
						||
| 
								 | 
							
									pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								##!!! need to select propper dir for preview...
							 | 
						||
| 
								 | 
							
								# this should:
							 | 
						||
| 
								 | 
							
								#	- create thumbnail						- DONE
							 | 
						||
| 
								 | 
							
								#	- create preview						- DONE
							 | 
						||
| 
								 | 
							
								#	- extract metadata						- DONE
							 | 
						||
| 
								 | 
							
								#	- populate EXIF/IPTC of preview images	- DONE
							 | 
						||
| 
								 | 
							
								#	- add path to preview/thumb				- DONE
							 | 
						||
| 
								 | 
							
								#	- generate tags							##!!!
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								def import_image(path):
							 | 
						||
| 
								 | 
							
									'''
							 | 
						||
| 
								 | 
							
									import a single image.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									'''
							 | 
						||
| 
								 | 
							
									# get the filename...
							 | 
						||
| 
								 | 
							
									file_name = os.path.split(path)[-1]
							 | 
						||
| 
								 | 
							
									file_name_base = file_name.split('.')[0]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# start with metadata...
							 | 
						||
| 
								 | 
							
									metadata = pyexiv2.ImageMetadata(path)
							 | 
						||
| 
								 | 
							
									metadata.read()
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									# add path to the original as a comment...
							 | 
						||
| 
								 | 
							
									if metadata['Exif.Photo.UserComment'].value.strip() == '':
							 | 
						||
| 
								 | 
							
										metadata['Exif.Photo.UserComment'] = 'RAW path: ' + os.path.abspath(path)
							 | 
						||
| 
								 | 
							
									else:
							 | 
						||
| 
								 | 
							
										metadata['Exif.Photo.UserComment'] = preview_metadata['Exif.Photo.UserComment'].value + '\n\nRAW path: ' + os.path.abspath(path)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# extract preview from raw file (largest)...
							 | 
						||
| 
								 | 
							
									orig_preview_path = os.path.join(ARCHIVE_PATH, HIRES_DIR, file_name)
							 | 
						||
| 
								 | 
							
								##	orig_preview = metadata.previews[-1]
							 | 
						||
| 
								 | 
							
								##	orig_preview.write_to_file(orig_preview_path)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									##!!! HACK: use a lib instead of exec-ing a command for each image...
							 | 
						||
| 
								 | 
							
									cmd = 'exiv2 -f -l "%s" -ep%s "%s"' % (
							 | 
						||
| 
								 | 
							
										os.path.join(ARCHIVE_PATH, TMP_DIR),
							 | 
						||
| 
								 | 
							
										len(metadata.previews),
							 | 
						||
| 
								 | 
							
										path
							 | 
						||
| 
								 | 
							
										)
							 | 
						||
| 
								 | 
							
									os.system(cmd)
							 | 
						||
| 
								 | 
							
									##!!! HACK: guessing the file name...
							 | 
						||
| 
								 | 
							
									orig_preview_path = os.path.join(ARCHIVE_PATH, TMP_DIR, '%s-preview%s.jpg' % (
							 | 
						||
| 
								 | 
							
																									file_name_base,
							 | 
						||
| 
								 | 
							
																									len(metadata.previews)))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# generate preview and save to preview dir...
							 | 
						||
| 
								 | 
							
									preview_path = os.path.join(ARCHIVE_PATH, PREVIEW_DIR, file_name_base)
							 | 
						||
| 
								 | 
							
									orig = Image.open(orig_preview_path)
							 | 
						||
| 
								 | 
							
									scale = PREVIEW_SIZE/float(max(*orig.size))
							 | 
						||
| 
								 | 
							
								##	preview = orig.resize((int(orig.size[0]*scale), int(orig.size[1]*scale)), Image.BICUBIC)
							 | 
						||
| 
								 | 
							
									preview = orig.resize((int(orig.size[0]*scale), int(orig.size[1]*scale)), Image.ANTIALIAS)
							 | 
						||
| 
								 | 
							
									preview.save(preview_path + '.jpg')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									preview_metadata = pyexiv2.ImageMetadata(preview_path + '.jpg')
							 | 
						||
| 
								 | 
							
									preview_metadata.read()
							 | 
						||
| 
								 | 
							
									metadata.copy(preview_metadata)
							 | 
						||
| 
								 | 
							
									preview_metadata.write()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# generate thumb and save to thumb dir...
							 | 
						||
| 
								 | 
							
									thumb_path = os.path.join(ARCHIVE_PATH, THUMBS_DIR, file_name_base)
							 | 
						||
| 
								 | 
							
									preview.thumbnail((THUMB_SIZE, THUMB_SIZE), Image.ANTIALIAS)
							 | 
						||
| 
								 | 
							
									preview.save(thumb_path + '.jpg')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									thumb_metadata = pyexiv2.ImageMetadata(thumb_path + '.jpg')
							 | 
						||
| 
								 | 
							
									thumb_metadata.read()
							 | 
						||
| 
								 | 
							
									metadata.copy(thumb_metadata)
							 | 
						||
| 
								 | 
							
									thumb_metadata.write()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									##!!! tag stuff...
							 | 
						||
| 
								 | 
							
									##!!!
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def import_dir(path):
							 | 
						||
| 
								 | 
							
									'''
							 | 
						||
| 
								 | 
							
									'''
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#-----------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if __name__ == '__main__':
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									import_image(os.path.join('test', 'RAW.NEF'))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#=======================================================================
							 | 
						||
| 
								 | 
							
								#                                            vim:set ts=4 sw=4 nowrap :
							 |