Added append_images to PDF saving

This commit is contained in:
Andrew Murray 2017-05-13 14:26:52 +10:00
parent 770cdc6aa6
commit 80806d349f
2 changed files with 94 additions and 75 deletions

View File

@ -20,7 +20,7 @@
# Image plugin for PDF images (output only). # Image plugin for PDF images (output only).
## ##
from . import Image, ImageFile from . import Image, ImageFile, ImageSequence
from ._binary import i8 from ._binary import i8
import io import io
@ -133,13 +133,24 @@ def _save(im, fp, filename, save_all=False):
# #
# pages # pages
numberOfPages = 1 ims = [im]
if save_all:
append_images = im.encoderinfo.get("append_images", [])
for append_im in append_images:
if append_im.mode != im.mode:
append_im = append_im.convert(im.mode)
append_im.encoderinfo = im.encoderinfo.copy()
ims.append(append_im)
numberOfPages = 0
for im in ims:
im_numberOfPages = 1
if save_all: if save_all:
try: try:
numberOfPages = im.n_frames im_numberOfPages = im.n_frames
except AttributeError: except AttributeError:
# Image format does not have n_frames. It is a single frame image # Image format does not have n_frames. It is a single frame image
pass pass
numberOfPages += im_numberOfPages
pages = [str(pageNumber*3+4)+" 0 R" pages = [str(pageNumber*3+4)+" 0 R"
for pageNumber in range(0, numberOfPages)] for pageNumber in range(0, numberOfPages)]
@ -151,9 +162,9 @@ def _save(im, fp, filename, save_all=False):
Kids="["+"\n".join(pages)+"]") Kids="["+"\n".join(pages)+"]")
_endobj(fp) _endobj(fp)
for pageNumber in range(0, numberOfPages): pageNumber = 0
im.seek(pageNumber) for imSequence in ims:
for im in ImageSequence.Iterator(imSequence):
# #
# image # image
@ -236,6 +247,8 @@ def _save(im, fp, filename, save_all=False):
_endobj(fp) _endobj(fp)
pageNumber += 1
# #
# trailer # trailer
startxref = fp.tell() startxref = fp.tell()

View File

@ -74,6 +74,12 @@ class TestFilePdf(PillowTestCase):
self.assertTrue(os.path.isfile(outfile)) self.assertTrue(os.path.isfile(outfile))
self.assertGreater(os.path.getsize(outfile), 0) self.assertGreater(os.path.getsize(outfile), 0)
# Append images
im.save(outfile, save_all=True, append_images=[hopper()])
self.assertTrue(os.path.isfile(outfile))
self.assertGreater(os.path.getsize(outfile), 0)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()