# How to directly load a JPEG image directly from URL into Luxor

**URL:** <https://discourse.julialang.org/t/how-to-directly-load-a-jpeg-image-directly-from-url-into-luxor/113578>\
**Category:** New to Julia\
**Tags:** luxor\
**Created:** [April 28, 2024, 1:09am UTC](https://discourse.julialang.org/t/how-to-directly-load-a-jpeg-image-directly-from-url-into-luxor/113578 "2024-04-28T01:09:16Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![StevenSiew](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevensiew/32/218393_2.png) [@StevenSiew](https://discourse.julialang.org/u/StevenSiew)\
**Post date:** [April 28, 2024, 1:09am UTC](https://discourse.julialang.org/t/how-to-directly-load-a-jpeg-image-directly-from-url-into-luxor/113578/1 "2024-04-28T01:09:16Z")

</div>

I have figured out how to load a PNG image directly into Luxor. My solution is crude but it works.

```julia
using Luxor
using HTTP
dir_temp_name = tempname()
println("dir_temp_name is ",dir_temp_name)
file_temp_name = HTTP.download("https://www.wikipedia.org/portal/wikipedia.org/assets/img/Wikipedia-logo-v2@2x.png", dir_temp_name)
println("file_temp_name is ",file_temp_name)
board_img = readpng(file_temp_name)
rm(dir_temp_name)

```

But it turns out that the image I wanted to load from URL is a JPEG image

Original map URL is  
“https: [//i.imgur.com/DFyPjui.jpeg](https://i.imgur.com/DFyPjui.jpeg)”  
Original Milky Way Coordinate URL is  
“https: [//upload.wikimedia.org/wikipedia/commons/1/12/Artist’s\_impression\_of\_the\_Milky\_Way\_(updated\_-\_annotated).jpg](https://upload.wikimedia.org/wikipedia/commons/1/12/Artist%27s_impression_of_the_Milky_Way_%28updated_-_annotated%29.jpg)”

And Luxor documentation says that it CANNOT handle JPEG

 ![LuxorQuestion](https://global.discourse-cdn.com/julialang/original/3X/9/b/9b1f16399a22070295604b817efee4cbf54c2d5c.png)

Any ideas on how I can load a JPEG file directly into Luxor?  
I was thinking of a way to convert a JPEG file into a PNG file on disk first but I don’t know how to do so using Julia packages.

---

<div class="post-metadata">

**Author:** ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)\
**Post date:** [April 28, 2024, 9:25am UTC](https://discourse.julialang.org/t/how-to-directly-load-a-jpeg-image-directly-from-url-into-luxor/113578/2 "2024-04-28T09:25:52Z")

</div>

You can use Images to load and save files:

```julia
using Downloads
import Images
using Luxor

f = Downloads.download("https://upload.wikimedia.org/wikipedia/commons/1/12/Artist%27s_impression_of_the_Milky_Way_%28updated_-_annotated%29.jpg")

img = Images.load(f)
Images.save("/tmp/file.png", img)

@draw begin
    scale(0.1)
    rotate(π/3)
    placeimage(readpng("/tmp/file.png"), centered=true)
end

```

---

<div class="post-metadata">

**Author:** ![StevenSiew](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevensiew/32/218393_2.png) [@StevenSiew](https://discourse.julialang.org/u/StevenSiew)\
**Post date:** [April 29, 2024, 10:34am UTC](https://discourse.julialang.org/t/how-to-directly-load-a-jpeg-image-directly-from-url-into-luxor/113578/3 "2024-04-29T10:34:30Z")

</div>

For those who are interested. This is how I finally solved my problem.

```julia
#=
    Read an PNG image from URL into Luxor
    requires package Luxor,HTTP
=#
function ReadPNGImgFromURL(url::String;verbose=false)
    function vprintln(args...)
        if verbose == true
            println(args...)
        end
    end
    local file_temp_name = tempname() * ".png"
    vprintln("file_temp_name is ", file_temp_name)
    HTTP.download(url, file_temp_name)
    local board_img = Luxor.readpng(file_temp_name)
    rm(file_temp_name)
    return board_img
end

#=
    Read an JPEG image from URL into Luxor
    requires package Luxor,HTTP,Images
=#
function ReadJPEGImgFromURL(url::String;verbose=false)
    function vprintln(args...)
        if verbose == true
            println(args...)
        end
    end
    local jpeg_filename = tempname() * ".jpg"
    vprintln("jpeg_filename is ", jpeg_filename)
    HTTP.download(url, jpeg_filename)
    # Now convert JPEG file into PNG file   
    local jpeg_img = Images.load(jpeg_filename)
    png_filename = tempname() * ".png"
    vprintln("png_filename is ", png_filename)
    Images.save(png_filename, jpeg_img)
    local board_img = Luxor.readpng(png_filename)
    rm(jpeg_filename)
    rm(png_filename)
    return board_img
end

```
