Skip to content

should load(::Stream, ...) methods skip magic bytes? #163

Open
@ssfrr

Description

@ssfrr

In the README, the example for loading from a stream is:

function load(f::File{format"PNG"})
  open(f) do s
  skipmagic(s) # skip over the magic bytes
  # You can just call the method below...
  ret = load(s)
  # ...or implement everything here instead
  end
end

# You can support streams and add keywords:
function load(s::Stream{format"PNG"}; keywords...)
  # s is already positioned after the magic bytes
  # Do the stuff to read a PNG file
  chunklength = read(s, UInt32)
  ...
end

This works if the user calls load("somefile.png"), which will end up calling the load(::File, ...) method, which handles skipping the magic bytes before calling load(::Stream). What I'm not super clear on is how this is intended to be used directly. e.g. I couldn't just do:

open("somefile.png") do io
    load(io)
end

In ImageMagick.jl it looks like load is called on the IO stream directly without skipping the magic(k) bytes.

So if it seems like the way ImageMagick does it (leaving the stream at the very beginning of the file when calling load(::Stream)) I can put in a documentation PR that clarifies that.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions