Skip to content

Using jpeg() function over cgi

2 messages · michael watson (IAH-C), Peter Dalgaard

#
OK, thanks for all your help :-D
  
Sorry for not observing normal e-mail help list rules - I am running SUSE 8.1 professional.

If someone coule try and explain a little as to why jpeg() can be used when I run the script as the user httpd runs as, and why it can't when it is run from a cgi script by the same user, then I may be able to get a handle on the problem.  

I have tried using bitmap() instead but quite frankly the images produced are just not of the same quality, either using type="jpeg" or type="png256" and messing around with resolution - they just look more grainy and the circles are, well, more square.

So i guess my REAL question is how do i get images on the same quality over cgi if I am not using the jpeg() function?

And in theory it is an R question, as my linux sys/admin doesn't have a clue why we're getting X11 error message over cgi because he hasn't got a clue how the jpeg() R function works.  The documentation states:

"they may not be usable unless the X11 display is available to the owner of the R process"

Well i run httpd as a user called "base" and if i log in to a shell as base, trust me the X11 display IS available then.  Sooooo, if someone could explain WHY jpeg() won't work over cgi, then i can explain to my sys/admin and he can fix it for me.

OR alternatively, if someone can explain to me how to coax bitmap() into producing images of the quality of jpeg()...??

Thanks
Mick

-----Original Message-----
From: Prof Brian Ripley [mailto:ripley at stats.ox.ac.uk]
Sent: 13 June 2003 16:02
To: michael watson (IAH-C)
Cc: 'r-help at stat.math.ethz.ch'
Subject: Re: [R] Using jpeg() function over cgi


Yes, it has been solved and discussed in the R-help archives many times.
The help(jpeg) page is pretty explicit too.  One alternative is bitmap().

To use jpeg() under a Unix-alike you need to set up an X server that your
R process can use.  It's a bit hard to help you do that when you don't
even mention your OS (I am inferring it is a Unix-alike), but you may be
able to solve the permissions problem or you may be able to set by a
server by something like Xvfb.  In any case, it is not an R problem
On Fri, 13 Jun 2003, michael watson (IAH-C) wrote:

            
No, not the x11() device, but the jpeg() device.  They are not the same!

  
    
#
"michael watson (IAH-C)" <michael.watson at bbsrc.ac.uk> writes:
It's not so much a matter of user credentials, but of mode of
operation. If you login from a dumb terminal (or a Windows machine),
then you'd have the same symptom of not being able to access the X
server (after all, someone else might be using it). If you login from
a remote Linux machine, then you won't see the problem, but the X
server you're talking to is the one on your local machine, not on the
remote machine. 

What you can do is to set up an X server separate from the one that
controls the physical display but working with a virtual frame buffer
device (Xvfb) instead, then make sure that that is accessible to your
cgi process. I'm not quite sure whether more is required than running
it as user "base" (the display server generally runs as root and is
very picky about the protocol for letting other users in).
It has been done, I'm pretty sure. Check the archives of the mailing
list. One option is to generate bitmaps at a higher resolution and then
smooth and scale them afterwards using e.g. pnmsmooth and pnmscale or
the ImageMagick tools.