From 639536c7c3dd92e3ecb77c5287a24c72a521ffac Mon Sep 17 00:00:00 2001 From: Michael Larabel Date: Fri, 26 Dec 2008 14:32:47 -0500 Subject: bilde_renderer: Add support for dynamically resizing the image drawing buffer --- .../objects/bilde_renderer/bilde_png_renderer.php | 35 +++++++++++++++++----- pts-core/objects/bilde_renderer/bilde_renderer.php | 4 +++ .../objects/bilde_renderer/bilde_svg_renderer.php | 28 +++++++++++------ 3 files changed, 50 insertions(+), 17 deletions(-) (limited to 'pts-core') diff --git a/pts-core/objects/bilde_renderer/bilde_png_renderer.php b/pts-core/objects/bilde_renderer/bilde_png_renderer.php index 68e0347..c03ff3a 100644 --- a/pts-core/objects/bilde_renderer/bilde_png_renderer.php +++ b/pts-core/objects/bilde_renderer/bilde_png_renderer.php @@ -25,19 +25,22 @@ class bilde_png_renderer extends bilde_renderer { public function __construct($width, $height, $embed_identifiers = "") { - $this->image = imagecreate($width, $height); - - imageinterlace($this->image, true); - - if(function_exists("imageantialias")) - { - imageantialias($this->image, true); - } + $this->image = $this->init_new_gd_image($width, $height); + $this->image_width = $width; + $this->image_height = $height; } public function render_image($output_file = null, $quality = 0) { return imagepng($this->image, $output_file, $quality); } + public function resize_image($width, $height) + { + $img = $this->image; + $this->image = $this->init_new_gd_image($width, $height); + $this->image_width = $width; + $this->image_height = $height; + $this->image_copy_merge($img, 0, 0); + } public function destroy_image() { imagedestroy($this->image); @@ -199,6 +202,22 @@ class bilde_png_renderer extends bilde_renderer return array($box_width, $box_height); } + + // Privates + + private function init_new_gd_image($width, $height) + { + $img = imagecreate($width, $height); + + imageinterlace($img, true); + + if(function_exists("imageantialias")) + { + imageantialias($img, true); + } + + return $img; + } } ?> diff --git a/pts-core/objects/bilde_renderer/bilde_renderer.php b/pts-core/objects/bilde_renderer/bilde_renderer.php index 8b03675..1f11697 100644 --- a/pts-core/objects/bilde_renderer/bilde_renderer.php +++ b/pts-core/objects/bilde_renderer/bilde_renderer.php @@ -24,9 +24,13 @@ abstract class bilde_renderer { var $image; + var $image_width = -1; + var $image_height = -1; + var $embed_identifiers = null; abstract function __construct($width, $height, $embed_identifiers = ""); // create the object abstract function render_image($output_file = null, $quality = 0); + abstract function resize_image($width, $height); abstract function destroy_image(); abstract function write_text_left($text_string, $font_type, $font_size, $font_color, $bound_x1, $bound_y1, $bound_x2, $bound_y2, $rotate_text = false); diff --git a/pts-core/objects/bilde_renderer/bilde_svg_renderer.php b/pts-core/objects/bilde_renderer/bilde_svg_renderer.php index 818f850..0169f75 100644 --- a/pts-core/objects/bilde_renderer/bilde_svg_renderer.php +++ b/pts-core/objects/bilde_renderer/bilde_svg_renderer.php @@ -25,21 +25,31 @@ class bilde_svg_renderer extends bilde_renderer { public function __construct($width, $height, $embed_identifiers = null) { - $this->image = "\n\n"; + $this->image_width = $width; + $this->image_height = $height; + $this->embed_identifiers = $embed_identifiers; + } + public function resize_image($width, $height) + { + $this->image_width = $width; + $this->image_height = $height; + } + public function render_image($output_file = null, $quality = 0) + { + $svg_image = "\n\n"; - if(is_array($embed_identifiers)) + if(is_array($this->embed_identifiers)) { - foreach($embed_identifiers as $key => $value) + foreach($this->embed_identifiers as $key => $value) { - $this->image .= "\n"; + $svg_image .= "\n"; } } - $this->image .= "\n\n"; - } - public function render_image($output_file = null, $quality = 0) - { - return $output_file != null && @file_put_contents($output_file, $this->image . "\n\n"); + $svg_image .= "image_width . " " . $this->image_height . "\" width=\"" . $this->image_width . "\" height=\"" . $this->image_height . "\">\n\n"; + $svg_image .= $this->image . "\n\n"; + + return $output_file != null && @file_put_contents($output_file, $svg_image); } public function destroy_image() { -- cgit