diff --git a/py-packages/imagelist2/imagelist2/__init__.py b/py-packages/imagelist2/imagelist2/__init__.py index fc35874..3b51d35 100644 --- a/py-packages/imagelist2/imagelist2/__init__.py +++ b/py-packages/imagelist2/imagelist2/__init__.py @@ -9,7 +9,7 @@ from imagelist2.db import DB, sqlite_sqrt, sqlite_square from imagelist2.image import ImageMeasure, is_image_extension from tqdm import tqdm -__version__ = "0.0.1" +__version__ = "0.0.3" SQLFILE = "image-list.sqlite" # IMGMATCH = re.compile("|".join([".*\." + x + "$" |.*\.jpeg$|.*\.png$|.*\.gif$|.*\.tif$", re.I) BADDIRS = ["_tn", "_med", ".tn", ".med"] @@ -26,6 +26,7 @@ class ImageList: def recursive_add(self): dir_count = 0 + image_count = 0 for path, dirs, files in os.walk(os.path.realpath(self.options.startpath), followlinks=self.options.symlinks): clean_dirs(dirs) dir_count += 1 @@ -60,21 +61,25 @@ class ImageList: if self.db.is_hash_mismatch(image): has_changed = True if has_changed: + image_count += 1 self.add_single(image, change=True) else: if not self.options.no_add: + image_count += 1 self.add_single(image, change=False) self.db.conn.commit() + if image_count > 0: + print(f"Added/changed {image_count} images") return def add_single(self, image, change=False): if change: query = "UPDATE list SET hash=?, date=? ,size=? WHERE file=?" - error_msg = f"error adding file: {image.filename}" + error_msg = f"error adding image: {image.filename}" else: query = "INSERT INTO list(hash,date,size,file) VALUES (?,?,?,?)" - error_msg = f"error changing file: {image.filename}" + error_msg = f"error changing image: {image.filename}" try: self.db.cursor().execute( @@ -119,13 +124,14 @@ class ImageList: continue image = ImageMeasure(filename) cursor.execute( - """INSERT INTO data(hash,portrait,width,height) - VALUES(?,?,?,?)""", + """INSERT INTO data(hash,portrait,width,height,description) + VALUES(?,?,?,?,?)""", ( row[0], image.get_portrait(), image.get_width(), image.get_height(), + image.get_description() ), ) if i % 50 == 0: @@ -145,7 +151,7 @@ class ImageList: cursor.execute("DELETE FROM list where file == ?", (file,)) self.db.conn.commit() if len(to_delete) > 0: - print(f"Cleaned {len(to_delete)} files") + print(f"Cleaned {len(to_delete)} images") return def clean_data(self): @@ -746,11 +752,11 @@ def main(): il = ImageList(options) if options.command == "db": - if not options.no_delete: - il.delete_missing() if not options.no_add: il.recursive_add() il.base_add() + if not options.no_delete: + il.delete_missing() if not options.no_delete_data: il.clean_data() if options.measure: diff --git a/py-packages/imagelist2/imagelist2/image.py b/py-packages/imagelist2/imagelist2/image.py index 36c5fc7..deb2cab 100644 --- a/py-packages/imagelist2/imagelist2/image.py +++ b/py-packages/imagelist2/imagelist2/image.py @@ -111,6 +111,12 @@ class ImageMeasure: self.portrait = self.height >= self.width return self.width, self.height, self.portrait + def get_description(self): + if self.description is None: + self.description = read_image_comment(self.filename) + return self.description + + def get_image(self, image_type="numpy"): if self.image is None: @@ -227,3 +233,8 @@ def read_image_size(fname): """Just reading the size is faster with PIL""" im = Image.open(fname) return im.width, im.height + +def read_image_comment(fname): + """Just reading the comment with PIL""" + im = Image.open(fname) + return im.info.get('comment','')