[cairo] Embedding jpeg in pdf
Behdad Esfahbod
behdad at behdad.org
Fri Jul 18 04:53:07 PDT 2008
Instead of commenting on your API right away, let me point out two
things:
- What's so bad about depending on libjpg anyway?
- At some point we SHOULD be able to compress images as JPG instead of
PNG when embedding in PS/PDF, so we will need libjpg anyway.
behdad
On Sun, 2008-07-13 at 13:53 +0930, Adrian Johnson wrote:
> One of the items on the ROADMAP [1] for 1.8 is jpeg embedding in the
> PDF, PS, and win32-printing backends.
>
> There are a couple of ways this could be implemented. The minimal
> approach would be to add a function to supply the jpeg data to a
> surface. The jpeg data would be used instead of the image data when
> embedding the surface image in backends that support jpeg. The advantage
> of this approach is that no dependency on a jpeg library is required.
> The disadvantage is that the user would need to be careful to ensure
> that the surface has the same content as the jpeg image otherwise
> fallback images are going to be wrong.
>
> The other approach is to provide a cairo_image_surface_create_from_jpeg
> function. The advantage is a simpler API for applications to use. The
> disadvantage is the libjpeg dependency.
>
> I have created three patches to implement these two ideas on the jpeg
> branch of my git repository [2]. The first patch adds the API function
>
> void
> cairo_surface_set_jpeg_data (cairo_surface_t *surface,
> unsigned char *data,
> long length)
>
> to supply the jpeg data to a surface.
>
> The second patch implements PDF embedding of jpeg images. The third
> patch adds the API function:
>
> cairo_surface_t *
> cairo_image_surface_create_from_jpeg (const char *filename)
>
>
> The current limitations of these patches that I am aware of are:
>
> - I am not sure who should own the data supplied by
> cairo_surface_set_jpeg_data() and whether the entire data or only the
> pointer should be copied when snapshotting surfaces.
>
> - cairo_image_surface_create_from_jpeg() does not free the jpeg data
> when the surface is destroyed.
>
> - The error handling in cairo_image_surface_create_from_jpeg() is
> probably wrong.
>
> - A create_from_jpeg_stream function would also be required if we are
> going to use cairo_image_surface_create_from_jpeg().
>
>
> Any comments on which approach to jpeg embedding we should take and what
> the API should look like?
>
>
> [1] http://www.cairographics.org/roadmap/
> [2]
> http://gitweb.freedesktop.org/?p=users/ajohnson/cairo.git;a=shortlog;h=jpeg
> _______________________________________________
> cairo mailing list
> cairo at cairographics.org
> http://lists.cairographics.org/mailman/listinfo/cairo
--
behdad
http://behdad.org/
"Those who would give up Essential Liberty to purchase a little
Temporary Safety, deserve neither Liberty nor Safety."
-- Benjamin Franklin, 1759
More information about the cairo
mailing list