combining graphs from GD::Graph in one image file

combining graphs from GD::Graph in one image file

am 28.05.2006 15:51:08 von tospo

Does anybody know how I can get more than one graph on a single image
file generated by the GD:Graph module?

I need to generate a lot of histograms which cannot be combined into a
single chart but all of these charts should be combined into one big
image file (doesn't need to be pretty). I need to make a lot of these
so combining the images by hand would not be ideal - is there a way to
do this in GD:Graph?

Thanks a lot!

Re: combining graphs from GD::Graph in one image file

am 29.05.2006 12:33:23 von rvtol+news

tospo schreef:

> Does anybody know how I can get more than one graph on a single image
> file generated by the GD:Graph module?

Is that a real question? I don't think so. Please read
http://www.catb.org/~esr/faqs/smart-questions.html


> I need to generate a lot of histograms which cannot be combined into a
> single chart

Why not?


> but all of these charts should be combined into one big
> image file (doesn't need to be pretty).

What is your definition of 'combined'? For 'not pretty' you could put
them all transparently on top of each other.


> I need to make a lot of these
> so combining the images by hand would not be ideal - is there a way to
> do this in GD:Graph?

I think you mean GD::Graph. I would use the module GD to do this.

--
Affijn, Ruud

"Gewoon is een tijger."

Re: combining graphs from GD::Graph in one image file

am 29.05.2006 14:15:25 von tospo

Apologies if this was unclear and sorry for the typo.

I cannot combine all of my histograms for one dataset into one chart
because there will be dozens of them and the output will not be
readable.

By "not pretty" I meant that it doesn't have to be formatted for
printing or anything. It is fine if this generates a big image that one
needs to scroll through on a computer screen because that's all that I
want to do with it.

So what I want the output of my script to look like is this:

chart 1 chart 2
| |
+------ +---------

chart 3 chart 4
| |
+------ +----------

I couldn't find anything on the internet that shows me how (and if)
this can be done in GD::Graph.

How would I do this with GD?

Thank you very much for your help,

tospo

Re: combining graphs from GD::Graph in one image file

am 29.05.2006 16:29:06 von Peter Scott

On Mon, 29 May 2006 05:15:25 -0700, tospo wrote:
> By "not pretty" I meant that it doesn't have to be formatted for
> printing or anything. It is fine if this generates a big image that one
> needs to scroll through on a computer screen because that's all that I
> want to do with it.

http://www.imagemagick.org/script/perl-magick.php#montage

--
Peter Scott
http://www.perlmedic.com/
http://www.perldebugged.com/

Re: combining graphs from GD::Graph in one image file

am 29.05.2006 16:43:53 von Dean Arnold

tospo wrote:
> Apologies if this was unclear and sorry for the typo.
>
> I cannot combine all of my histograms for one dataset into one chart
> because there will be dozens of them and the output will not be
> readable.
>
> By "not pretty" I meant that it doesn't have to be formatted for
> printing or anything. It is fine if this generates a big image that one
> needs to scroll through on a computer screen because that's all that I
> want to do with it.
>
> So what I want the output of my script to look like is this:
>
> chart 1 chart 2
> | |
> +------ +---------
>
> chart 3 chart 4
> | |
> +------ +----------
>
> I couldn't find anything on the internet that shows me how (and if)
> this can be done in GD::Graph.
>
> How would I do this with GD?
>

I think the terms you're (collectively) searching for are
"composite" vs. "tiled", ie, composite mashes all the
charts into a single set of axes; tiled is what is described above.

That said, AFAIK, GD::Graph doesn't directly support tiling;
however, implementing it directly in GD should be pretty
straightforward.

1. Create each chart as a standalone image.

2. Compute the size needed to contain the charts as tiles

3. Create a new GD::Image

4. Copy each chart image into the tiled image at the proper
coordinates

E.g., if all are same size, then (psuedocode):

#
# create charts here as usual, pushing each resulting
# GD::Image object on @charts
#
$Htiled = $Hchart * 2 + $vmargin; # height + some vertical margin
$Wtiled = $Wchart * 2 + $hmargin; # width + some horiz. margin

my $tiled = new GD::Image($Wtiled, $Htiled);
my $white = $tiled->colorAllocate(255, 255, 255);
#
# fill the background
#
$tiled->filledRectangle(0,0,$Wtiled-1, $Htiled-1, $white);
#
# compute coords of each tiled chart
# NOTE: these need adjustment for the margin spacing
#
my @coords = (
0, 0,
$Wtiled/2, 0,
0, $Htiled/2,
$Wtiled/2, $Htiled/2
);

$tiled->copy($_, shift @corrds, shift @coords, 0,0,$Wchart,$Hchart)
foreach (@charts);

open TILED, ">$tiled_file";
binmode TILED;
print TILED $tiled->png();
close TILED;


HTH,
Dean Arnold
Presicient Corp.

Re: combining graphs from GD::Graph in one image file

am 29.05.2006 16:57:05 von tospo

Thank you all very much!!!! I guess that gives me enough to try out for
the time being.

tospo

Re: combining graphs from GD::Graph in one image file

am 31.05.2006 12:47:10 von Ron Savage

On Mon, 29 May 2006 22:15:25 +1000, tospo wrote:

Hi tospo


CPAN is your friend. Search for chart. Eg:

http://search.cpan.org/~rsavage/Image-Magick-Chart-1.02/

[ANNOUNCE] GD::Tiler (was Re: combining graphs from GD::Graph inone image file)

am 02.06.2006 22:10:50 von Dean Arnold

tospo wrote:
> Thank you all very much!!!! I guess that gives me enough to try out for
> the time being.
>
> tospo
>

You got me itching, so I scratched. I've been
meaning to add tiling support to DBIx::Chart anyway.

I've just uploaded GD::Tiler to CPAN. It indexed OK, so it
should be showing up in a few hours.

Its pretty simple, just one method, and
you pass in an arryaref of GD::Image objects or image filenames,
plus a few other configuration parameters, and it spits
out a new GD::Image object with the input tiled (and, in array context,
also returns the coordinates of individual images in the tiled
output).

Regards,
Dean Arnold
Presicient Corp.

Re: GD::Tiler (was Re: combining graphs from GD::Graph in one image file)

am 07.06.2006 12:27:51 von tospo

Dean Arnold wrote:
> tospo wrote:
> > Thank you all very much!!!! I guess that gives me enough to try out for
> > the time being.
> >
> > tospo
> >
>
> You got me itching, so I scratched. I've been
> meaning to add tiling support to DBIx::Chart anyway.
>
> I've just uploaded GD::Tiler to CPAN. It indexed OK, so it
> should be showing up in a few hours.
>
> Its pretty simple, just one method, and
> you pass in an arryaref of GD::Image objects or image filenames,
> plus a few other configuration parameters, and it spits
> out a new GD::Image object with the input tiled (and, in array context,
> also returns the coordinates of individual images in the tiled
> output).
>
> Regards,
> Dean Arnold
> Presicient Corp.

Thanks Dean, this module is exactly what I needed. Works fine for me.
Just a suggestions: would it be possible to add another argument for
the maximum number of images in a row? Could help to make the output
more printer-friendly.

Re: GD::Tiler (was Re: combining graphs from GD::Graph in one imagefile)

am 07.06.2006 16:45:02 von Dean Arnold

tospo wrote:
> Dean Arnold wrote:
>>
>> I've just uploaded GD::Tiler to CPAN. It indexed OK, so it
>> should be showing up in a few hours.
>>
>> Its pretty simple, just one method, and
>> you pass in an arryaref of GD::Image objects or image filenames,
>> plus a few other configuration parameters, and it spits
>> out a new GD::Image object with the input tiled (and, in array context,
>> also returns the coordinates of individual images in the tiled
>> output).
>>
>> Regards,
>> Dean Arnold
>> Presicient Corp.
>
> Thanks Dean, this module is exactly what I needed. Works fine for me.
> Just a suggestions: would it be possible to add another argument for
> the maximum number of images in a row? Could help to make the output
> more printer-friendly.
>

Not certain what you're issue is ? Since you have the ability
to specify Width and Height, you should get the
images positioned to fit your printer. Is the issue that
you have too many images to fit within a specified Width/Height ?
If so, I spose I could apply a scaling to the final image
after tiling, along with a ImagesPerRow parameter. However,
image quality would probably suffer (depending on how much
scaling was needed).

- Dean

Re: GD::Tiler (was Re: combining graphs from GD::Graph in one imagefile)

am 07.06.2006 18:22:52 von Dean Arnold

Dean Arnold wrote:
> tospo wrote:
>> Dean Arnold wrote:
> >>
>>> I've just uploaded GD::Tiler to CPAN. It indexed OK, so it
>>> should be showing up in a few hours.
>>>
>>> Its pretty simple, just one method, and
>>> you pass in an arryaref of GD::Image objects or image filenames,
>>> plus a few other configuration parameters, and it spits
>>> out a new GD::Image object with the input tiled (and, in array context,
>>> also returns the coordinates of individual images in the tiled
>>> output).
>>>
>>> Regards,
>>> Dean Arnold
>>> Presicient Corp.
>>
>> Thanks Dean, this module is exactly what I needed. Works fine for me.
>> Just a suggestions: would it be possible to add another argument for
>> the maximum number of images in a row? Could help to make the output
>> more printer-friendly.
>>
>
> Not certain what you're issue is ? Since you have the ability
> to specify Width and Height, you should get the
> images positioned to fit your printer. Is the issue that
> you have too many images to fit within a specified Width/Height ?
> If so, I spose I could apply a scaling to the final image
> after tiling, along with a ImagesPerRow parameter. However,
> image quality would probably suffer (depending on how much
> scaling was needed).
>
> - Dean

Oops, I think I understand your issue now. By specifying an
ImagesPerRow, the default layout won't be "square",
but could be thinner/taller (or wider/shorter)
wo/ any scaling, and you don't need to specify any
explicit Width/Height values.

I'll see what I can do; I've also got some POD fixes
to apply.

- Dean

Re: GD::Tiler (was Re: combining graphs from GD::Graph in one image file)

am 07.06.2006 18:45:29 von tospo

> Oops, I think I understand your issue now. By specifying an
> ImagesPerRow, the default layout won't be "square",
> but could be thinner/taller (or wider/shorter)
> wo/ any scaling, and you don't need to specify any
> explicit Width/Height values.

That's exactly what I meant. Of course you could always calculate the
positions of your images to make them fit but what I like about your
module is that I don't need to do that and I don't even need to know
how many images I have.
Thanks for your efforts!

tospo

Re: GD::Tiler (was Re: combining graphs from GD::Graph in one imagefile)

am 07.06.2006 21:47:57 von Dean Arnold

tospo wrote:
>> Oops, I think I understand your issue now. By specifying an
>> ImagesPerRow, the default layout won't be "square",
>> but could be thinner/taller (or wider/shorter)
>> wo/ any scaling, and you don't need to specify any
>> explicit Width/Height values.
>
> That's exactly what I meant. Of course you could always calculate the
> positions of your images to make them fit but what I like about your
> module is that I don't need to do that and I don't even need to know
> how many images I have.
> Thanks for your efforts!
>
> tospo
>

Done. GD-Tiler 0.11 uploaded, and CPAN has indexed it, but
it'll probably take a few hours to be accessible.

- Dean

Re: GD::Tiler (was Re: combining graphs from GD::Graph in one image file)

am 09.06.2006 21:36:56 von tospo

>
> Done. GD-Tiler 0.11 uploaded, and CPAN has indexed it, but
> it'll probably take a few hours to be accessible.
>
> - Dean

I just tested it - excellent, thanks a lot!

tospo