[cairo] Not sure how to handle MIME in my go binding
psychon at znc.in
Sat May 10 14:28:18 PDT 2014
On 10.05.2014 23:13, jimmy frasche wrote:
> I think I want to add MIME support to my binding but I'm not entirely
> sure what it's purpose or function is and completely unsure what the
> use-cases for it are.
You are creating PDFs. All of these PDFs contain your company's logo in the top
right corner. The logo is available as a PNG image. Encoding the logo as a PNG
image results in a much smaller file than other approaches. Thus, it would be
great to also encode the image in PNG format inside the PDF file.
For this you use mime data.
> The docs for cairo_surface_set_mime_data say,
> "The attached image (or filename) data can later be used by backends
> which support it […] to emit this data instead of making a snapshot of
> the surface.
> "Caution: the associated MIME data will be discarded if you draw on
> the surface afterwards. Use this function with care."
You load your company's logo into a cairo image surface. Then you attach the raw
PNG file contents to this surfaces as PNG mime data. Backends which support it
(e.g. the PDF backend) then *might* use the PNG data instead of the raw image
surface's contents inside the resulting PDF file and you get a smaller file.
But the backend is not required to do so and thus the image surface content must
describe the same image as the attached PNG mime data!
> I'm reading this as saying that this is essentially a way of painting
> an image surface as a surface pattern, specially optimized to avoid
> decoding the image data, and without the ability to do anything
Kinda. But you still have to decode the data, it's just that the resulting files
could use the mime data.
> Can you, say, use this to embed an image in a PS surface by creating
> two PS surfaces, attaching the mime data to one to use as a surface
> pattern on the other, which you can then use as you normally would?
> (Do they both have to be PS surfaces?)
> I also see talk of a mime surface, searching the mailing list
> archives, but the only references in the source I see are:
> $ find -name "*.[ch]" | xargs grep -in mime_surface
> ./src/cairo.c:220: * writing (such as #cairo_mime_surface_t) then a
> ./test/mime-surface-api.c:146:CAIRO_TEST (mime_surface_api,
> Was this never implemented or did it just become the present mime data api?
> If so, the documentation for cairo_create's return should be amended.
I don't know, sorry. That was before my cairo time.
> I'd like to expose this functionality idiomatically and clearly
> documented, so any help increasing my undersanding would be
> If this conversation leads to any way to clarify the current
> documentation I'm more than happy to put together patches for the API
Happiness can't be found -- it finds you.
More information about the cairo