Source code for pyquickhelper.imghelper.img_helper
"""
Helpers around images.
.. versionadded:: 1.9
:githublink:`%|py|7`
"""
import os
import glob
import numpy
[docs]def zoom_img(img, factor=1., max_dim=None, out_file=None, fLOG=None):
"""
Zooms an image.
:param img: image or filename or pattern
:param factor: multiplies the image by this factor if not None
:param max_dim: modifies the image, the highest dimension
should below this number
:param out_file: stores the image into this file if not None
:param fLOG: logging function
:return: image
:githublink:`%|py|23`
"""
if isinstance(img, str):
if '*' in img:
found = glob.glob(img)
res = []
for im in found:
if out_file is None:
i = zoom_img(im, factor=factor, max_dim=max_dim, fLOG=fLOG)
else:
of = out_file.format(os.path.split(im)[-1])
i = zoom_img(im, factor=factor, max_dim=max_dim,
out_file=of, fLOG=fLOG)
res.append(i)
if len(res) == 0:
raise FileNotFoundError( # pragma: no cover
"Unable to find anything in '{}'.".format(img))
return res
from PIL import Image
obj = Image.open(img)
elif hasattr(img, 'size'):
obj = img
else:
raise TypeError( # pragma: no cover
"Image should be a string or an image not {}.".format(type(img)))
dx, dy = obj.size
if max_dim is not None:
if not isinstance(max_dim, int):
max_dim = int(max_dim)
facx = max_dim * 1. / max(dx, 1)
facy = max_dim * 1. / max(dy, 1)
factor = min(facx, facy)
if factor is not None:
if not isinstance(factor, float):
factor = int(factor)
dx = int(dx * factor + 0.5)
dy = int(dy * factor + 0.5)
obj = obj.resize((dx, dy))
if out_file is not None:
if fLOG is not None:
fLOG("Writing '{}' dim=({},{}).".format(out_file, dx, dy))
obj.save(out_file)
return obj
[docs]def white_to_transparency(img, out_file=None):
"""
Sets white color as transparency color.
:param img: image (:epkg:`Pillow`)
:param out_file: stores the image into this file if not None
:return: image (:epkg:`Pillow`)
Code taken from `Using PIL to make all white pixels transparent?
<https://stackoverflow.com/questions/765736/
using-pil-to-make-all-white-pixels-transparent>`_.
.. versionadded:: 1.9
:githublink:`%|py|80`
"""
from PIL import Image
if isinstance(img, str):
img = Image.open(img)
x = numpy.asarray(img.convert('RGBA')).copy()
x[:, :, 3] = (255 * (x[:, :, :3] != 255).any(axis=2)).astype(numpy.uint8)
obj = Image.fromarray(x)
if out_file is not None:
obj.save(out_file)
return obj