[cairo] Embedding jpeg in pdf

Behdad Esfahbod behdad at behdad.org
Fri Jul 18 12:26:04 PDT 2008


On Fri, 2008-07-18 at 09:59 -0700, Vladimir Vukicevic wrote:
> On Jul 18, 2008, at 4:53 AM, Behdad Esfahbod wrote:
> 
> > Instead of commenting on your API right away, let me point out two
> > things:
> >
> >  - What's so bad about depending on libjpg anyway?
> 
> Because it adds an unnecessary burden on any users of cairo that are  
> not on linux, who either don't care about jpeg reading or (more  
> likely) already have their own jpeg infrastructure in place.  It also  
> means that even if they use something other than libjpeg for jpeg  
> handling, they'd have to pull in libjpeg as well.

What other jpeg infrastructure do you have in mind?  If native
win32/quartz stuff, then cairo can just use those too.


> >  - 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.
> 
> I would do this using a callback mechanism, and let the app use  
> whatever jpeg library it wants.
> 
> Like I said before, I'm not against a separate cairo-utils library  
> that provides implementations of some of this this stuff for those who  
> just want a simple one-stop solution, I just don't think that  
> functionality should be part of the core.
> 
>      - Vlad
> 
> > 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
> >
> > _______________________________________________
> > cairo mailing list
> > cairo at cairographics.org
> > http://lists.cairographics.org/mailman/listinfo/cairo
> 
> _______________________________________________
> 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