Added "transparency" argument to load()

This commit is contained in:
Andrew Murray 2021-07-19 09:08:45 +10:00
parent 426b730d3b
commit 1d73a483f4
4 changed files with 23 additions and 5 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -96,6 +96,17 @@ def test_showpage():
assert_image_similar(plot_image, target, 6)
@pytest.mark.skipif(not HAS_GHOSTSCRIPT, reason="Ghostscript not available")
def test_transparency():
with Image.open("Tests/images/reqd_showpage.eps") as plot_image:
plot_image.load(transparency=True)
assert plot_image.mode == "RGBA"
with Image.open("Tests/images/reqd_showpage_transparency.png") as target:
# fonts could be slightly different
assert_image_similar(plot_image, target, 6)
@pytest.mark.skipif(not HAS_GHOSTSCRIPT, reason="Ghostscript not available")
def test_file_object(tmp_path):
# issue 479

View File

@ -66,7 +66,7 @@ than leaving them in the original color space. The EPS driver can write images
in ``L``, ``RGB`` and ``CMYK`` modes.
If Ghostscript is available, you can call the :py:meth:`~PIL.Image.Image.load`
method with the following parameter to affect how Ghostscript renders the EPS
method with the following parameters to affect how Ghostscript renders the EPS
**scale**
Affects the scale of the resultant rasterized image. If the EPS suggests
@ -79,6 +79,11 @@ method with the following parameter to affect how Ghostscript renders the EPS
im.load(scale=2)
im.size #(200,200)
**transparency**
If true, generates an RGBA image with a transparent background, instead of
the default behaviour of an RGB image with a white background.
GIF
^^^

View File

@ -61,7 +61,7 @@ def has_ghostscript():
return False
def Ghostscript(tile, size, fp, scale=1):
def Ghostscript(tile, size, fp, scale=1, transparency=False):
"""Render an image using Ghostscript"""
# Unpack decoder tile
@ -108,6 +108,8 @@ def Ghostscript(tile, size, fp, scale=1):
lengthfile -= len(s)
f.write(s)
device = "pngalpha" if transparency else "ppmraw"
# Build Ghostscript command
command = [
"gs",
@ -117,7 +119,7 @@ def Ghostscript(tile, size, fp, scale=1):
"-dBATCH", # exit after processing
"-dNOPAUSE", # don't pause between pages
"-dSAFER", # safe mode
"-sDEVICE=ppmraw", # ppm driver
f"-sDEVICE={device}",
f"-sOutputFile={outfile}", # output file
# adjust for image origin
"-c",
@ -325,11 +327,11 @@ class EpsImageFile(ImageFile.ImageFile):
return (length, offset)
def load(self, scale=1):
def load(self, scale=1, transparency=False):
# Load EPS via Ghostscript
if not self.tile:
return
self.im = Ghostscript(self.tile, self.size, self.fp, scale)
self.im = Ghostscript(self.tile, self.size, self.fp, scale, transparency)
self.mode = self.im.mode
self._size = self.im.size
self.tile = []