aboutsummaryrefslogtreecommitdiffstats
path: root/interlace-frames.py
diff options
context:
space:
mode:
authorDoug Zongker <dougz@android.com>2014-03-11 12:39:33 -0700
committerDoug Zongker <dougz@android.com>2014-03-11 12:39:33 -0700
commit5120c9fbb60d6625ec2588d77f13953884bb1a93 (patch)
tree6266e3e3d2d1c8c329b4e09ed8c164b152534d66 /interlace-frames.py
parent39cf417e17011a72dd39acfe4cc8c90af26bdbaf (diff)
downloadbootable_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.py53
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)