|
|
|
#include <module.h> |
inherit "module"; |
inherit "roxenlib"; |
constant thread_safe=1; |
|
roxen.ImageCache the_cache; |
constant cvs_version="$Id: cimg.pike,v 1.12 2000/02/10 05:29:53 nilsson Exp $"; |
constant tagdesc="Provides the tag 'cimg' that can be used to convert images " |
"between different image formats."; |
|
constant module_type = MODULE_PARSER; |
constant module_name = "Image converter"; |
constant module_doc = tagdesc; |
|
TAGDOCUMENTATION |
#ifdef manual |
constant tagdoc=(["cimg":"<desc tag>"+tagdesc+"</desc>"]); |
|
|
|
|
#endif |
|
void start() |
{ |
the_cache = roxen.ImageCache( "cimg", generate_image ); |
} |
|
mapping generate_image( mapping args, RequestID id ) |
{ |
if( args->data ) |
return roxen.low_decode_image( args->data ); |
else |
return roxen.low_load_image( args->src, id ); |
} |
|
mapping find_internal( string f, RequestID id ) |
{ |
return the_cache->http_file_answer( f, id ); |
} |
|
mapping get_my_args( mapping args, object id ) |
{ |
mapping a= |
([ |
"src":(args->src?fix_relative( args->src, id ):0), |
"quant":args->quant, |
"format":args->format, |
"maxwidth":args->maxwidth, |
"maxheight":args->maxheight, |
"scale":args->scale, |
"dither":args->dither, |
"gamma":args->gamma, |
"data":args->data, |
]); |
foreach( glob( "*-*", indices(args)), string n ) |
a[n] = args[n]; |
return a; |
} |
|
string tag_cimg( string t, mapping args, RequestID id ) |
{ |
mapping a = get_my_args( args, id ); |
args -= a; |
args->src = query_internal_location()+the_cache->store( a,id ); |
if( mapping size = the_cache->metadata( a, id, 1 ) ) |
{ |
|
args->width = size->xsize; |
args->height = size->ysize; |
} |
return make_tag( "img", args ); |
} |
|
string tag_cimg_url( string t, mapping args, RequestID id ) |
{ |
return query_internal_location()+the_cache->store(get_my_args(args,id),id); |
} |
|
|