On Thu, Jul 28, 2016 at 5:44 AM, Jonathan Pittman <
jonathan.mark.pitt...@gmail.com> wrote:

> Sam, I do not think that I can use LibRAW (or LibTIFF) on appengine.  And
> I aim to write and run some apps on appengine that will let me do some
> things with my RAW images (not just the thumbnail or the jpeg previews).
>
> Extracting the data (and metadata) is the easy part.  I have written
> things in Go that can do that all day long (makernotes are usually always
> more involved of course).  Knowing what to do with the data after you
> extracted it is the piece that makes this more complex.  Most of the
> libraries (LibTIFF and LibRAW) out there tend to enumerate all of the
> things they want to support and how to handle them.  I want something much
> more flexible than that.
>
> I am fairly familiar with the different variations of metadata and
> embedded structures from different camera manufacturers and how they like
> to abuse some formats.  Not just that, but as you say, most of them are
> really just TIFFs under the hood.  For the files that are not TIFF, this
> becomes much easier as long as you have the file format specification.
>
> My initial aim is to solve the TIFF problem in a flexible way that all
> TIFF based use cases can benefit from, not just camera raw files.  I have
> seen people write their own TIFF implementations just to handle a single
> case (e.g. EXIF parsing, image preview extraction, bio-medical imaging, GIS
> imaging).  None of these provide a common foundation that all cases can
> use.  This is not an easy problem to solve, but I think it can be made more
> elegant than existing implementations.  I see TIFF as a multi-layered issue.
>
> The first and simplest piece is the basic file structure.  The structure
> of the tiff header and top level IFDs are pretty straightforward (even in
> BigTIFF) and easy to parse.  This should be its own package.  Why?  Because
> EXIF/GPS will use it and others may also.  A lot of people do not realize
> it, but almost every camera phone (and consumer and professional camera)
> that produces a JPEG, also embeds a TIFF file inside the APP1 marker
> segment of that JPEG.  But instead of containing what people think of as a
> traditional TIFF image, it contains EXIF metadata and sometimes GPS
> metadata.  The basic structure is the same, the data being represented
> might be different.
>
> The second piece is the types, tag IDs, tag spaces, tag sets, and tag
> values.  This is really an adaption layer on top of the file structure that
> leads to metadata interpretation and/or image data with values to process
> and apply to the image content found within.  This could be a separate
> package, but could also live with the package containing the file
> structures.  The field types are especially beneficial to interpreting
> fields instead of just entries in an IFD (they are different).
>
> The third piece is the image handling and processing.  This can definitely
> be its own separate package.  The idea is that in the second piece, you
> interpreted all of the tags to mean something, but the image layer knows
> what to do with that data.  The basic package should only handle baseline
> and extended tiff tags and values.
>
> And this is where I envision the specifics begin to break out.  The idea I
> have would involve being able to register new types and new tags with the
> base tiff package.  The baseline and extended tags (and their values) would
> be baked right into the library, but there will be room for growth and
> functions to register new tag IDs, values, and types.  Add to this the
> registration of handlers to take over when certain tags and values are
> seen.  Some examples:
>
>    1. Tag 50706 is DNGVersion.  If seen, pass a TIFF object over to a DNG
>    image handling library for processing.
>    2. Tag 271 & 272 are Make & Model respectively.  If the Make is "NIKON
>    CORPORATION" and the Model is "NIKON D800", then pass the TIFF object over
>    to a handler registered to process files from a Nikon D800.
>
> The idea here being that, if we do not support some new tag value or
> camera in the base package, you can write your own package to implement the
> pieces you need and register it with the base package while all of the
> other plumbing just works.  There will be a lot of overlap in functionality
> in those libraries at first.  But much of that can be centralized where it
> makes sense and be made accessible for future common use (e.g. compression
> values referencing compression methods).
>
> I know it is a lot of work.  I have been thinking about this for a few
> years and even started prototyping some of it, but I really would like to
> see it happen.  I have hit a few roadblocks in design and implementation,
> but more importantly I simply do not have the time to tackle this myself
> anymore.  I also agree with Peter Herth that good quality native libraries
> are good for the existing community as well as for enticing newcomers to
> the language.
>
> Thoughts from anyone on this?
>

I guess the next logical step is to start an organization on github, put
some design notes and some code... and let people come :)
I know (or strongly suspect) this could be useful for astronomy hobbyists...

-s

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to