diff --git a/README.md b/README.md index 6fc846259..177d10896 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,24 @@ The following packages are optional: Python bindings of fontconfig are required for displaying genealogical symbols +* **magic** + + Python magic bindings required to have better performances with image + processing. + If this module is not available, we continue to use Gdk. + This avoid to load the image in memory. This is a real improvement + when we have many big images. + Used in odfdoc, rtfdoc and webreport and tested with png, gif, jpeg, bmp, tiff + # + # file size with magic without (Gdk) ratio + # example 1 : 256k 0.00080 0.00575 7 + # example 2 : 21M 0.00171 0.55860 326 + + Debian, Ubuntu, ... : python3-magic + Fedora, Redhat, ... : python3-magic + openSUSE : python-magic + ArchLinux : python-magic + Optional packages required by Third-party Addons ------------------------------------------------ diff --git a/gramps/gen/utils/image.py b/gramps/gen/utils/image.py index 7a953f580..a15ce36ec 100644 --- a/gramps/gen/utils/image.py +++ b/gramps/gen/utils/image.py @@ -168,19 +168,26 @@ def image_size(source): # For performance reasons, we'll try to get image size from magic. # This avoid to load the image in memory. This is a real improvement # when we have many big images. - # Used in odfdoc, rtfdoc and webreport and tested with png, gif, jpeg + # Used in odfdoc, rtfdoc and webreport and tested with png, gif, jpeg, + # bmp, tiff # # file size with magic without (Gdk) ratio # example 1 : 256k 0.00080 0.00575 7 # example 2 : 21M 0.00171 0.55860 326 img = magic.from_file(source) + found = img.find("TIFF") + if found == 0: + width = re.search('width=(\d+)', img).groups() + height = re.search('height=(\d+)', img).groups() + return (int(width[0]), int(height[0])) found = img.find("precision") if found > 0: img = img[found:] size = re.search('(\d+)\s*x\s*(\d+)', img).groups() return (int(size[0]), int(size[1])) - except ImportError: - # python-magic is not installed. So Trying to get image size with Gdk. + except (ImportError, FileNotFoundError): + # python-magic is not installed or the file does not exist. + # So Trying to get image size with Gdk. try: img = GdkPixbuf.Pixbuf.new_from_file(source) width = img.get_width()