animation fixes: show for videos, imagemagick init
This commit is contained in:
parent
aa929ec24f
commit
4ed7144ca4
@ -53,21 +53,29 @@ immutable AnimatedGif
|
|||||||
filename::String
|
filename::String
|
||||||
end
|
end
|
||||||
|
|
||||||
|
file_extension(fn) = Base.Filesystem.splitext(fn)[2][2:end]
|
||||||
|
|
||||||
gif(anim::Animation, fn = giffn(); kw...) = buildanimation(anim.dir, fn; kw...)
|
gif(anim::Animation, fn = giffn(); kw...) = buildanimation(anim.dir, fn; kw...)
|
||||||
mov(anim::Animation, fn = movfn(); kw...) = buildanimation(anim.dir, fn; kw...)
|
mov(anim::Animation, fn = movfn(); kw...) = buildanimation(anim.dir, fn; kw...)
|
||||||
mp4(anim::Animation, fn = mp4fn(); kw...) = buildanimation(anim.dir, fn; kw...)
|
mp4(anim::Animation, fn = mp4fn(); kw...) = buildanimation(anim.dir, fn; kw...)
|
||||||
|
|
||||||
|
const _imagemagick_initialized = Ref(false)
|
||||||
|
|
||||||
function buildanimation(animdir::AbstractString, fn::AbstractString;
|
function buildanimation(animdir::AbstractString, fn::AbstractString;
|
||||||
fps::Integer = 20, loop::Integer = 0)
|
fps::Integer = 20, loop::Integer = 0)
|
||||||
fn = abspath(fn)
|
fn = abspath(fn)
|
||||||
try
|
try
|
||||||
# high quality
|
if !_imagemagick_initialized[]
|
||||||
speed = round(Int, 100 / fps)
|
|
||||||
file = joinpath(Pkg.dir("ImageMagick"), "deps","deps.jl")
|
file = joinpath(Pkg.dir("ImageMagick"), "deps","deps.jl")
|
||||||
if isfile(file) && !haskey(ENV, "MAGICK_CONFIGURE_PATH")
|
if isfile(file) && !haskey(ENV, "MAGICK_CONFIGURE_PATH")
|
||||||
include(file)
|
include(file)
|
||||||
end
|
end
|
||||||
|
_imagemagick_initialized[] = true
|
||||||
|
end
|
||||||
|
|
||||||
# prefix = get(ENV, "MAGICK_CONFIGURE_PATH", "")
|
# prefix = get(ENV, "MAGICK_CONFIGURE_PATH", "")
|
||||||
|
# high quality
|
||||||
|
speed = round(Int, 100 / fps)
|
||||||
run(`convert -delay $speed -loop $loop $(joinpath(animdir, "*.png")) -alpha off $fn`)
|
run(`convert -delay $speed -loop $loop $(joinpath(animdir, "*.png")) -alpha off $fn`)
|
||||||
|
|
||||||
catch err
|
catch err
|
||||||
@ -88,7 +96,14 @@ end
|
|||||||
|
|
||||||
# write out html to view the gif... note the rand call which is a hack so the image doesn't get cached
|
# write out html to view the gif... note the rand call which is a hack so the image doesn't get cached
|
||||||
function Base.show(io::IO, ::MIME"text/html", agif::AnimatedGif)
|
function Base.show(io::IO, ::MIME"text/html", agif::AnimatedGif)
|
||||||
write(io, "<img src=\"$(relpath(agif.filename))?$(rand())>\" />")
|
ext = file_extension(agif.filename)
|
||||||
|
write(io, if ext == "gif"
|
||||||
|
"<img src=\"$(relpath(agif.filename))?$(rand())>\" />"
|
||||||
|
elseif ext in ("mov", "mp4")
|
||||||
|
"<video controls><source src=\"$(relpath(agif.filename))?$(rand())>\" type=\"video/$ext\"></video>"
|
||||||
|
else
|
||||||
|
error("Cannot show animation with extension $ext: $agif")
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -163,11 +178,11 @@ Collect one frame per for-block iteration and return an `Animation` object.
|
|||||||
Example:
|
Example:
|
||||||
|
|
||||||
```
|
```
|
||||||
p = plot(1)
|
p = plot(1)
|
||||||
anim = @animate for x=0:0.1:5
|
anim = @animate for x=0:0.1:5
|
||||||
push!(p, 1, sin(x))
|
push!(p, 1, sin(x))
|
||||||
end
|
end
|
||||||
gif(anim)
|
gif(anim)
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
macro animate(forloop::Expr, args...)
|
macro animate(forloop::Expr, args...)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user