# Encode a plot to base64?

**URL:** <https://discourse.julialang.org/t/encode-a-plot-to-base64/27765>\
**Category:** General Usage\
**Created:** [August 20, 2019, 2:19pm UTC](https://discourse.julialang.org/t/encode-a-plot-to-base64/27765 "2019-08-20T14:19:24Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Losses](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/losses/32/9175_2.png) [@Losses](https://discourse.julialang.org/u/Losses)\
**Post date:** [August 20, 2019, 2:19pm UTC](https://discourse.julialang.org/t/encode-a-plot-to-base64/27765/1 "2019-08-20T14:19:24Z")

</div>

Hello everyone, I’m trying to encode a plot to base64 string, but facing some trouble.

That’s what I’m trying to do:

```julia
using Plotly

a = plot(x,y,title="Two Lines",label=["Line 1" "Line 2"],lw=3);
io = IOBuffer();
iob64_encode = Base64EncodePipe(io);
show(io, MIME"image/svg+xml", a);

```

And got the following error:

```julia
ERROR: MethodError: no method matching show(::Base.GenericIOBuffer{Array{UInt8,1}}, ::Type{MIME{Symbol("image/svg+xml")}}, ::Plots.Plot{Plots.GRBackend})
Closest candidates are:
  show(::IO, ::MIME{Symbol("text/plain")}, ::Plots.Plot) at C:\Users\Losses\.juliapro\JuliaPro_v1.1.1.1\packages\Plots\FQOz1\src\output.jl:194
  show(::IO, ::MIME{Symbol("text/plain")}, ::Any) at sysimg.jl:219
  show(::IO, ::DataType) at show.jl:436
  ...
Stacktrace:
 [1] top-level scope at none:0

```

It seems base64 encoder could only encode text? so which function should I use to get base64 of a image in most formats?

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [August 20, 2019, 2:45pm UTC](https://discourse.julialang.org/t/encode-a-plot-to-base64/27765/2 "2019-08-20T14:45:18Z")

</div>

Firstly, `show(io, MIME"image/svg+xml", a)` should be written as `show(io, MIME("image/svg+xml"), a)` but I think `Plotly` only prints out to HTML (so something like `sprint(show, MIME("text/html"), a)`), based on [https://github.com/sglyon/PlotlyJS.jl/blob/460b35b3507f1ce5c001354d0d2d03859ca60c70/src/display.jl#L16](https://github.com/sglyon/PlotlyJS.jl/blob/460b35b3507f1ce5c001354d0d2d03859ca60c70/src/display.jl#L16).

---

<div class="post-metadata">

**Author:** ![Losses](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/losses/32/9175_2.png) [@Losses](https://discourse.julialang.org/u/Losses)\
**Post date:** [August 21, 2019, 12:48am UTC](https://discourse.julialang.org/t/encode-a-plot-to-base64/27765/3 "2019-08-21T00:48:26Z")

</div>

Thank you! I finally made something work!

The working code is:

```julia
using Plots, Base64;
x = 1:10; y = rand(10);
a = plot(x,y,title="Two Lines",label=["Line 1" "Line 2"],lw=3);
io = IOBuffer();
iob64_encode = Base64EncodePipe(io);
show(iob64_encode, MIME("image/svg+xml"), a);
close(iob64_encode);
str = String(take!(io));

```

`MIME("image/svg+xml")` will also work, I’ll continue my work on implementing another Shiny on Julia 😃

---

<div class="post-metadata">

**Author:** ![kevbonham](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kevbonham/32/216165_2.png) [@kevbonham](https://discourse.julialang.org/u/kevbonham)\
**Post date:** [August 21, 2019, 1:21am UTC](https://discourse.julialang.org/t/encode-a-plot-to-base64/27765/4 "2019-08-21T01:21:51Z")

</div>

> [@Losses](#):
>
> I’ll continue my work on implementing another Shiny on Julia 😃

There are already [some efforts underway](https://discourse.julialang.org/t/shiny-for-julia-work-in-progress-early-request-for-feedback/14038) to do this. I don’t say this to discourage you from doing it yourself - having shiny in julia will be awesome and more power to anyone interested in taking that on - just wondering if it’s worth joining forces rather than duplicating effort. I suspect it’s a monumental task.

---

<div class="post-metadata">

**Author:** ![Losses](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/losses/32/9175_2.png) [@Losses](https://discourse.julialang.org/u/Losses)\
**Post date:** [August 21, 2019, 1:27am UTC](https://discourse.julialang.org/t/encode-a-plot-to-base64/27765/5 "2019-08-21T01:27:55Z")

</div>

I know that, but my main purpose is to learn something very basic about meta programming with Julia but not making something could be used on production environment 😀

---

<div class="post-metadata">

**Author:** ![kevbonham](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kevbonham/32/216165_2.png) [@kevbonham](https://discourse.julialang.org/u/kevbonham)\
**Post date:** [August 21, 2019, 10:13am UTC](https://discourse.julialang.org/t/encode-a-plot-to-base64/27765/6 "2019-08-21T10:13:20Z")

</div>

Great! Carry on then 🙂
