Skip to content

Commit 2408ad5

Browse files
authored
add support to display PNG for arbitrary types (#76)
1 parent f093891 commit 2408ad5

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/display.jl

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,17 @@ struct TerminalGraphicDisplay{TC<:IO,TS<:IO} <: AbstractDisplay
44
end
55
TerminalGraphicDisplay(io::IO) = TerminalGraphicDisplay(io, io)
66

7-
Base.displayable(::TerminalGraphicDisplay, ::MIME"image/png") = true
7+
Base.displayable(::TerminalGraphicDisplay, ::MIME"image/png", x::Any) =
8+
showable("image/png", x)
9+
Base.displayable(::TerminalGraphicDisplay, ::MIME"image/png", ::Vector{UInt8}) = true
10+
Base.displayable(::TerminalGraphicDisplay, ::MIME"image/png", ::AbstractArray{<:Colorant}) =
11+
true
12+
13+
function Base.display(d::TerminalGraphicDisplay, ::MIME"image/png", x::Any)
14+
io = IOBuffer()
15+
show(io, "image/png", x)
16+
display(d, MIME("image/png"), FileIO.load(io))
17+
end
818

919
function Base.display(d::TerminalGraphicDisplay, ::MIME"image/png", bytes::Vector{UInt8})
1020
# In this case, assume it to be png byte sequences, use FileIO to find a decoder for it.

test/tst_display.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,11 @@
1515
dsp = ImageInTerminal.TerminalGraphicDisplay(io)
1616
display(dsp, MIME("image/png"), bytes)
1717
@test length(read(io, String)) > 5_000
18+
19+
struct Foo end
20+
Base.show(io::IO, ::MIME"image/png", ::Foo) =
21+
FileIO.save(Stream{format"PNG"}(io), FileIO.load(fn))
22+
dsp = ImageInTerminal.TerminalGraphicDisplay(io)
23+
display(dsp, MIME("image/png"), Foo())
24+
@test length(read(io, String)) > 5_000
1825
end

0 commit comments

Comments
 (0)