summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSavetheinternet <savetheinternet@tinyboard.org>2011-07-22 19:40:57 +1000
committerSavetheinternet <savetheinternet@tinyboard.org>2011-07-22 19:40:57 +1000
commitab0d6e27d77b868c33dde7098d984f60dce9995c (patch)
treecdb455790758864a6e9fc364dd687f772e1f0431
parentf9bcde6e3dd1911f2e464f9824d65149072006a8 (diff)
ImageMagick support (including SVG, etc.)
-rw-r--r--inc/config.php4
-rw-r--r--inc/image.php61
2 files changed, 59 insertions, 6 deletions
diff --git a/inc/config.php b/inc/config.php
index 03571a92..8af70c9f 100644
--- a/inc/config.php
+++ b/inc/config.php
@@ -200,6 +200,9 @@
// Thumbnail extension, empty for inherited (png recommended)
$config['thumb_ext'] = 'png';
+ // Use Imagick instead of GD (some further config options below are ignored if set)
+ $config['imagick'] = false;
+
// Thumbnail quality (compression level), from 0 to 9
$config['thumb_quality'] = 7;
@@ -609,6 +612,7 @@
// Allowed image file extensions
$config['allowed_ext'] = Array('jpg', 'jpeg', 'bmp', 'gif', 'png');
+ // $config['allowed_ext'][] = 'svg';
// Allowed additional file extensions (not images; downloadable files)
$config['allowed_ext_files'] = Array();
diff --git a/inc/image.php b/inc/image.php
index eea33336..85a7456a 100644
--- a/inc/image.php
+++ b/inc/image.php
@@ -13,9 +13,13 @@
$this->src = $src;
$this->format = $format;
- $classname = 'Image' . strtoupper($this->format);
- if(!class_exists($classname)) {
- error('Unsupported file format: ' . $this->format);
+ if($config['imagick']) {
+ $classname = 'ImageImagick';
+ } else {
+ $classname = 'Image' . strtoupper($this->format);
+ if(!class_exists($classname)) {
+ error('Unsupported file format: ' . $this->format);
+ }
}
$this->image = new $classname($this);
@@ -32,10 +36,17 @@
}
public function resize($extension, $max_width, $max_height) {
- $classname = 'Image' . strtoupper($extension);
- if(!class_exists($classname)) {
- error('Unsupported file format: ' . $extension);
+ global $config;
+
+ if($config['imagick']) {
+ $classname = 'ImageImagick';
+ } else {
+ $classname = 'Image' . strtoupper($extension);
+ if(!class_exists($classname)) {
+ error('Unsupported file format: ' . $extension);
+ }
}
+
$thumb = new $classname(false);
$thumb->original_width = $this->size->width;
$thumb->original_height = $this->size->height;
@@ -86,6 +97,9 @@
}
public function __construct($img) {
+ if(method_exists($this, 'init'))
+ $this->init();
+
if($img !== false) {
$this->src = &$img->src;
$this->from();
@@ -123,6 +137,31 @@
}
}
+ class ImageImagick extends ImageBase {
+ public function init() {
+ $this->image = new Imagick();
+ }
+ public function from() {
+ $this->image->readImage($this->src);
+ }
+ public function to($src) {
+ $this->image->writeImage($src);
+ }
+ public function width() {
+ return $this->image->getImageWidth();
+ }
+ public function height() {
+ return $this->image->getImageHeight();
+ }
+ public function destroy() {
+ return $this->image->destroy();
+ }
+ public function resize() {
+ $this->image = $this->original;
+ $this->image->scaleImage($this->width, $this->height, false);
+ }
+ }
+
class ImagePNG extends ImageBase {
public function from() {
@@ -176,6 +215,16 @@
}
}
+ class ImageSVG extends ImageBase {
+ public function from() {
+ $im = new Imagick();
+ $this->image = @imagecreatefrombmp($this->src);
+ }
+ public function to($src) {
+ imagebmp($this->image, $src);
+ }
+ }
+
/*********************************************/
/* Fonction: imagecreatefrombmp */