sagemath / sage

Main repository of SageMath
https://www.sagemath.org
Other
1.31k stars 450 forks source link

Integrate APNG into show and save methods #16650

Open 8d15854a-f726-4f6b-88e7-82ec1970fbba opened 10 years ago

8d15854a-f726-4f6b-88e7-82ec1970fbba commented 10 years ago

Once #16571 and #7298 get merged, it is time to add support for animapted PNGs (APNG) to the Animation.show() and Animation.save() methods, and also to update the doctests to use show(format="png") for these.

Depends on #7298 Depends on #16571

CC: @nilesjohnson

Component: graphics

Keywords: notebook, animate

Author: Martin von Gagern

Branch/Commit: u/gagern/ticket/16650 @ 6c6eee3

Issue created by migration from https://trac.sagemath.org/ticket/16650

8d15854a-f726-4f6b-88e7-82ec1970fbba commented 10 years ago

Branch: u/gagern/ticket/16650

8d15854a-f726-4f6b-88e7-82ec1970fbba commented 10 years ago
comment:3

Only the last commit is really new. The merge before that did resolve a conflict, but in a pretty obvious way. Everything else is from the named dependencies.


Last 10 new commits:

e2d3e11Proper hyperlink formatting in animate documentation.
bd17f04Add APNG support.
a60fe0bTurn generator into list when rendering frames.
04665b0Fix frame size for standard example animation.
f4a2427Merge fix of standard example animation into APNG branch.
8af6a08Base Animation.show on Animation.save, and pass more arguments.
3beb8b1Create HTML to embed generated GIF in notebook.
c16f275Support HTML5 video tag.
effa6cfMerge branch ticket/7298 into ticket/16571 to create ticket/16650.
83d734cAdd support for APNG to Animation.save().
8d15854a-f726-4f6b-88e7-82ec1970fbba commented 10 years ago

Commit: 83d734c

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 10 years ago

Changed commit from 83d734c to 1e4de99

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 10 years ago

Branch pushed to git repo; I updated commit sha1. This was a forced push. New commits:

bc9f681Merge fix of standard example animation into APNG branch.
780e614Proper hyperlink formatting in animate documentation.
10f8e52Make number of frames available after rendering using generator.
941170bAdd APNG support.
3a99225Merge ticket/16645 into ticket/16571 to deal with conflict.
f0bfc49Allow embedding animations into tables.
2fb3d6aMark test saving GIF as optional.
f61d9d1Merge branch ticket/7298 into ticket/16571 to create ticket/16650.
1e4de99Add support for APNG to Animation.save().
7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 9 years ago

Branch pushed to git repo; I updated commit sha1. This was a forced push. New commits:

e216b92Make number of frames available after rendering using generator.
b057e61Add APNG support.
f347d4cDoctests for each method of APngAssembler using tracing fixture.
7d2531dDetails on my APNG contribution in module documentation.
dc0067dBase Animation.show on Animation.save, and pass more arguments.
4e9101fCreate HTML to embed generated GIF in notebook.
e4807ccSupport HTML5 video tag.
2f6a670Allow embedding animations into tables.
d0e89d5Merge branch ticket/7298 into ticket/16571 to create ticket/16650.
f5fc857Add support for APNG to Animation.save().
7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 9 years ago

Changed commit from 1e4de99 to f5fc857

8d15854a-f726-4f6b-88e7-82ec1970fbba commented 9 years ago
comment:8

The recent changes from #17234 prevent our dependency #7298 from being merged, and at the moment I'm far from sure how to rebase that code, see #7298 comment:48. Once I get that rebased, there is one question regarding this ticket here as well:

Should we reuse the PNG format description, or introduce a new one?

On the one hand, APNG (as opposed to MNG) is very much about graceful degradation, so it makes sense to treat it as PNG in most places. On the other hand, perhaps the display manager can decide whether a client is actually capable of displaying APNG or not. If so, we might prefer supported APNG over GIF, but GIF over unsupported APNG interpreted as still PNG. If the display manager does not know about APNG support, but does know that PNG is supported, then the user should at least be able to choose APNG format manually, even though it might not be the auto-selected default in that case.

vbraun commented 9 years ago
comment:9

Do not reuse OutputImagePng, that is for non-animated png.

Another basic output format should be a sequence of PNG, which can easily be displayed in a web browser with javascript (embed images as necessary). Perhaps the easiest animation format.

8d15854a-f726-4f6b-88e7-82ec1970fbba commented 9 years ago
comment:10

Replying to @vbraun:

Another basic output format should be a sequence of PNG, which can easily be displayed in a web browser with javascript (embed images as necessary). Perhaps the easiest animation format.

I'm not sure how much such a format would suffer from HTTP overhead, particularly for a large number of small frames. I guess it depends on the network connection (for the cloud in particular) whether that factor outweights the overhead of concatenating all PNGs to a single APNG file.

But if you are willing to use custom JavaScript code for animations, you could also use existing code which provides APNG support on browsers which don't support it natively.

vbraun commented 9 years ago
comment:11

I'm thinking about base64-encoded inline images, especially since IPython doesn't allow you to return arbitrary collections of files. Though an apng polyfill would work, too.

8d15854a-f726-4f6b-88e7-82ec1970fbba commented 9 years ago
comment:12

I intend not to work on this until #7298 gets reviewed and ready for merge.

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 9 years ago

Changed commit from f5fc857 to de1dcbb

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 9 years ago

Branch pushed to git repo; I updated commit sha1. This was a forced push. New commits:

a8d97b7Trac #7298: Enable HTML5 video in the Sage Notebook
f6e6412Trac #7298: Implement output types for various video container formats
ea5dfe2Trac #7298: Drop support for the autoplay and controls attributes for video
de1dcbbAdd support for APNG to Animation.save() and Animation.show(format="png").
7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 9 years ago

Branch pushed to git repo; I updated commit sha1. This was a forced push. New commits:

6c6eee3Trac #16650: Add support for APNG to Animation.save() and Animation.show().
7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 9 years ago

Changed commit from de1dcbb to 6c6eee3

8d15854a-f726-4f6b-88e7-82ec1970fbba commented 9 years ago
comment:15

Since #7298 received a positive review just now, here is a rebased version of this modification here. With the new rich representations framework, there was a lot more to do than in the original commits. But it integrates APNG nicely with all the rest.

fchapoton commented 6 years ago
comment:16

does not apply