diff options
author | Doug Zongker <dougz@android.com> | 2014-03-11 12:39:33 -0700 |
---|---|---|
committer | Doug Zongker <dougz@android.com> | 2014-03-11 12:39:33 -0700 |
commit | 5120c9fbb60d6625ec2588d77f13953884bb1a93 (patch) | |
tree | 6266e3e3d2d1c8c329b4e09ed8c164b152534d66 /interlace-frames.py | |
parent | 39cf417e17011a72dd39acfe4cc8c90af26bdbaf (diff) | |
download | bootable_recovery-5120c9fbb60d6625ec2588d77f13953884bb1a93.zip bootable_recovery-5120c9fbb60d6625ec2588d77f13953884bb1a93.tar.gz bootable_recovery-5120c9fbb60d6625ec2588d77f13953884bb1a93.tar.bz2 |
update tools for making recovery images
We no longer render animations as a base image with a
possibly-partially-transparent overlay drawn over it, so delete the
make-overlay.py tool. Now we represent them as series of images that
are interlaced by row (with a special text chunk in the PNG file
specifying the number of frames) so add the interlace-frames.py tool
to make those.
Change-Id: I79443f125f9c7d8d61cd09e3434745e0ef38893f
Diffstat (limited to 'interlace-frames.py')
-rw-r--r-- | interlace-frames.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/interlace-frames.py b/interlace-frames.py new file mode 100644 index 0000000..243e565 --- /dev/null +++ b/interlace-frames.py @@ -0,0 +1,53 @@ +# Copyright (C) 2014 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Script to take a set of frames (PNG files) for a recovery animation +and turn it into a single output image which contains the input frames +interlaced by row. Run with the names of all the input frames on the +command line, in order, followed by the name of the output file.""" + +import sys +try: + import Image + import PngImagePlugin +except ImportError: + print "This script requires the Python Imaging Library to be installed." + sys.exit(1) + +frames = [Image.open(fn).convert("RGB") for fn in sys.argv[1:-1]] +assert len(frames) > 0, "Must have at least one input frame." +sizes = set() +for fr in frames: + sizes.add(fr.size) + +assert len(sizes) == 1, "All input images must have the same size." +w, h = sizes.pop() +N = len(frames) + +out = Image.new("RGB", (w, h*N)) +for j in range(h): + for i in range(w): + for fn, f in enumerate(frames): + out.putpixel((i, j*N+fn), f.getpixel((i, j))) + +# When loading this image, the graphics library expects to find a text +# chunk that specifies how many frames this animation represents. If +# you post-process the output of this script with some kind of +# optimizer tool (eg pngcrush or zopflipng) make sure that your +# optimizer preserves this text chunk. + +meta = PngImagePlugin.PngInfo() +meta.add_text("Frames", str(N)) + +out.save(sys.argv[-1], pnginfo=meta) |