A Python module to deal with APNG file.
Project description
A Python module to deal with APNG file.
Features
Merge multiple images into one APNG file. (It use Pillow to convert images into PNG format)
Read APNG file and extract each frames into PNG file.
It doesn’t do any optimization but only concat the images. This might be changed in the future.
Dependencies
Pillow - Optional. You can still use pyAPNG without PIL but it can only read PNG files.
Development dependencies
See requirements.txt for other dev-dependencies.
Installation
From pypi:
pip install apng
Usage
Convert a series of images into APNG animation:
from apng import APNG
APNG.from_files(["1.jpg", "2.jpg", "3.jpg"], delay=100).save("result.png")
Use different delays:
from apng import APNG
files = [
("1.jpg", 100),
("2.jpg", 200),
("3.jpg", 300)
]
im = APNG()
for file, delay in files:
im.append_file(file, delay=delay)
im.save("result.png")
Extract frames from an APNG file:
from apng import APNG
im = APNG.open("animation.png")
for i, (png, control) in enumerate(im.frames):
png.save("{i}.png".format(i=i))
Add a text chunk to the PNG file:
from apng import PNG, make_text_chunk
im = PNG.open("image.png")
im.chunks.append(make_text_chunk(key="Comment", value="Some text"))
im.save("image.png")
Performance
If you want to convert some large JPGs into animation, the library has to convert your JPGs into PNGs then merge them into a single animation APNG file. The problems are:
It is extremely slow.
The file size of the APNG is extremely large. Probably 5x of the original or more.
In this case, I suggest trying an animation format called “ugoira”, which is implemented by Pixiv.net. There is also an image viewer named “HoneyView” which can view it locally.
Document
Todos
Add optimizer?
Changelog
0.3.4 (Mar 11, 2020)
Fix: exclude test files from the package.
0.3.3 (Feb 11, 2019)
Fix: failed to extract frames containing multiple fdAT chunks.
0.3.2 (Jul 20, 2018)
Add: make_text_chunk function.
Add: Chunk data class.
Change: now parse_chunks yields Chunk instead of a tuple. This should be safe since Chunk is a namedtuple.
0.3.1 (May 13, 2018)
Add: universal wheel.
0.3.0 (May 13, 2018)
Support Python 2.
Add: PNG method open_any, from_bytes.
Add: APNG method append_file, from_bytes.
Add: module function parse_chunks.
Drop: module function `is_png` and `chunks`.
Change: `PNG.open` now only reads PNG images. To read non-PNG images, use `PNG.open_any`.
Change: `APNG.append` now only accepts `PNG` instance. To append PNG files, use `APNG.append_file`.
0.2.1 (Apr 19, 2018)
Add: support num_plays. (#4)
0.2.0 (Dec 8, 2017)
0.1.0 (May 30, 2016)
First release.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.