Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 692941be authored by Elliott Hughes's avatar Elliott Hughes
Browse files

Go back to the old ear-wiggling Android animation.

But keep the new code so we can easily test new animations when we have them.

This change includes tbao's de-interlace script, plus a one-liner that's
necessary to play the animation at the correct speed when there's no
progress bar showing. (This was always a bug, it's just way more noticeable
when your animation only has 7 frames.)

Bug: http://b/28316654
Bug: http://b/26548285
Change-Id: I32c601c352d6be235d1b44f14fca7e125defd77d
parent df093c15
Loading
Loading
Loading
Loading

interlace-frames.py

100644 → 100755
+48 −14
Original line number Diff line number Diff line
#!/usr/bin/env python
# Copyright (C) 2014 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,19 +14,16 @@
# 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. Specify
the name of the output file with -o (or --output), and optionally specify the
number of frames per second (FPS) with --fps (default: 20).

e.g.
interlace-frames.py --fps 20 --output output.png frame0.png frame1.png frame3.png
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.
"""

from __future__ import print_function

import argparse
import os.path
import sys
try:
  import Image
@@ -35,7 +33,7 @@ except ImportError:
  sys.exit(1)


def interlace(output, fps, inputs):
def interlace(output, inputs):
  frames = [Image.open(fn).convert("RGB") for fn in inputs]
  assert len(frames) > 0, "Must have at least one input frame."
  sizes = set()
@@ -60,21 +58,57 @@ def interlace(output, fps, inputs):

  meta = PngImagePlugin.PngInfo()
  meta.add_text("Frames", str(N))
  meta.add_text("FPS", str(fps))

  out.save(output, pnginfo=meta)


def deinterlace(output, input):
  # Truncate the output filename extension if it's '.png'.
  if os.path.splitext(output)[1].lower() == '.png':
    output = output[:-4]

  img2 = Image.open(input)
  print(img2.mode)
  palette = img2.getpalette()
  img = img2.convert("RGB")
  num_frames = int(img.info.get('Frames', 1))
  print('Found %d frames in %s.' % (num_frames, input))
  assert num_frames > 0, 'Invalid Frames meta.'

  # palette = img.getpalette()
  print(palette)

  width, height = img.size
  height /= num_frames
  for k in range(num_frames):
    out = Image.new('RGB', (width, height))
    out.info = img.info
    for i in range(width):
      for j in range(height):
        out.putpixel((i, j), img.getpixel((i, j * num_frames + k)))
    # out.putpalette(img.getpalette(), rawmode='RGB')
    out2 = out.convert(mode='P', palette=palette)
    #out2 = out
    print(out2.mode)
    # out2.putpalette(palette)
    filename = '%s%02d.png' % (output, k)
    out2.save(filename)
    print('Frame %d written to %s.' % (k, filename))


def main(argv):
  parser = argparse.ArgumentParser()
  parser.add_argument('--fps', default=20)
  parser = argparse.ArgumentParser(description='Parse')
  parser.add_argument('--deinterlace', '-d', action='store_true')
  parser.add_argument('--output', '-o', required=True)
  parser.add_argument('input', nargs='+')
  args = parser.parse_args(argv)

  interlace(args.output, args.fps, args.input)
  if args.deinterlace:
    # args.input is a list, and we only process the first when deinterlacing.
    deinterlace(args.output, args.input[0])
  else:
    interlace(args.output, args.input)


if __name__ == '__main__':
  main(sys.argv[1:])
+25.3 KiB (34.9 KiB)
Loading image diff...
+25.3 KiB (34.9 KiB)
Loading image diff...
+24.8 KiB (34.7 KiB)
Loading image diff...
+24.8 KiB (34.7 KiB)
Loading image diff...
Loading