Merge pull request #1179 from SNoiraud/magic

This commit is contained in:
Nick Hall 2021-05-21 19:32:48 +01:00
commit 458772d1e6
2 changed files with 28 additions and 3 deletions

View File

@ -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
------------------------------------------------

View File

@ -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()