aboutsummaryrefslogtreecommitdiff
path: root/admin/Library/Image/Gd
diff options
context:
space:
mode:
authorYuchen Pei <hi@ypei.me>2021-10-14 15:16:42 +1100
committerYuchen Pei <hi@ypei.me>2021-10-14 15:16:42 +1100
commit07f5140771388c9e0c8a99b0dd2e5d950bdb173b (patch)
tree323c00faef1edc7dea2e88ff581cc2258b2b6432 /admin/Library/Image/Gd
parente119be145500700f3c465e12664403a07530a421 (diff)
moving h-source subdir out.
Diffstat (limited to 'admin/Library/Image/Gd')
-rw-r--r--admin/Library/Image/Gd/Captcha.php85
-rw-r--r--admin/Library/Image/Gd/Thumbnail.php151
-rw-r--r--admin/Library/Image/Gd/index.html1
3 files changed, 237 insertions, 0 deletions
diff --git a/admin/Library/Image/Gd/Captcha.php b/admin/Library/Image/Gd/Captcha.php
new file mode 100644
index 0000000..ace4806
--- /dev/null
+++ b/admin/Library/Image/Gd/Captcha.php
@@ -0,0 +1,85 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to create a captcha
+//you have to call session_start() before to initialize a captcha object
+class Image_Gd_Captcha
+{
+
+ private $params = array(); //parameters of the object
+ private $string = null; //the text string of the captcha
+
+ public function __construct($params = null)
+ {
+ $here = realpath('.');
+
+ $defaultParams = array(
+ 'boxWidth' => 150,
+ 'boxHeight' => 100,
+ 'charNumber' => 6,
+ 'fontPath' => $here.'/External/Fonts/FreeFont/FreeMono.ttf',
+ 'undulation' => true,
+ 'align' => false,
+ 'charHeight' => 28
+ );
+
+ //set the $this->scaffold->params array
+ if (is_array($params))
+ {
+ foreach ($params as $key => $value)
+ {
+ $defaultParams[$key] = $value;
+ }
+ }
+ $this->params = $defaultParams;
+
+ $this->string = generateString($this->params['charNumber']);
+ }
+
+ public function render()
+ {
+ //space among characters
+ $space = $this->params['boxWidth'] / ($this->params['charNumber']+1);
+ //create the image box
+ $img = imagecreatetruecolor($this->params['boxWidth'],$this->params['boxHeight']);
+
+ $background = imagecolorallocate($img,255,255,255);
+ $border = imagecolorallocate($img,0,0,0);
+ $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125));
+ $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125));
+ $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125));
+
+ //create the background
+ imagefilledrectangle($img,1,1,$this->params['boxWidth']-2,$this->params['boxHeight']-2,$background);
+ imagerectangle($img,0,0,$this->params['boxWidth']-1,$this->params['boxHeight']-2,$border);
+
+ //set the text
+ for ($i=0; $i< $this->params['charNumber']; $i++)
+ {
+ $color = $colors[$i % count($colors)];
+ $char = substr($this->string,$i,1);
+ $fontPath = $this->params['fontPath'];
+ $angle = $this->params['undulation'] === false ? 0 : -20+rand(0,40);
+ $yposFixed = (int)(($this->params['boxHeight'])/2);
+ $ypos = $this->params['align'] === true ? $yposFixed : $yposFixed + mt_rand(0,10);
+ $charHeight = $this->params['charHeight'];
+ imagettftext($img,$charHeight + rand(0,8),$angle,($i+0.3)*$space,$ypos,$color,$fontPath,$char);
+ }
+
+ $noiseColor = imagecolorallocate($img, mt_rand(125,255), mt_rand(125,255), mt_rand(125,255));
+ /* generate random dots in background */
+ for( $i=0; $i<($this->params['boxWidth'] * $this->params['boxHeight'])/7; $i++ ) {
+ imagefilledellipse($img, mt_rand(0,$this->params['boxWidth']), mt_rand(0,$this->params['boxHeight']), 1, 1, $noiseColor);
+ }
+
+ $_SESSION['captchaString'] = $this->string;
+ header('Content-Type: image/png');
+ imagepng($img);
+ imagedestroy($img);
+ }
+
+} \ No newline at end of file
diff --git a/admin/Library/Image/Gd/Thumbnail.php b/admin/Library/Image/Gd/Thumbnail.php
new file mode 100644
index 0000000..5981175
--- /dev/null
+++ b/admin/Library/Image/Gd/Thumbnail.php
@@ -0,0 +1,151 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to create a thumbnail
+class Image_Gd_Thumbnail
+{
+ const DS = DIRECTORY_SEPARATOR;
+
+ private $params = array(); //parameters of the object
+ private $basePath = null; //the path of the folder inside which the images are saved
+
+ public function __construct($basePath,$params = null)
+ {
+ $finalChar = $basePath[strlen($basePath) - 1];
+ if (strcmp($finalChar,self::DS) !== 0) $basePath .= self::DS;
+
+ $this->basePath = $basePath;
+
+ $defaultParams = array(
+ 'imgWidth' => 100,
+ 'imgHeight' => 100,
+ 'defaultImage' => null,
+ 'cropImage' => 'no',
+ 'horizAlign' => 'left',
+ 'vertAlign' => 'top'
+ );
+
+ //set the $this->scaffold->params array
+ if (is_array($params))
+ {
+ foreach ($params as $key => $value)
+ {
+ $defaultParams[$key] = $value;
+ }
+ }
+ $this->params = $defaultParams;
+ }
+
+ //create the thumbnail
+ //$imageName: the name of the file inside $this->basePath
+ public function render($imageFile)
+ {
+ $imagePath = $this->basePath . basename($imageFile);
+
+ if (!file_exists($imagePath) and isset($this->params['defaultImage'])) $imagePath = $this->params['defaultImage'];
+
+ $img = null;
+ $ext = strtolower(end(explode('.', $imagePath)));
+
+ if (strcmp($ext,'jpg') === 0 or strcmp($ext,'jpeg') === 0) {
+ $img = @imagecreatefromjpeg($imagePath);
+ } else if (strcmp($ext,'png') === 0) {
+ $img = @imagecreatefrompng($imagePath);
+ } else if (strcmp($ext,'gif') === 0) {
+ $img = @imagecreatefromgif($imagePath);
+ }
+
+ //If an image was successfully loaded, test the image for size
+ if ($img) {
+ //image size
+ $width = imagesx($img);
+ $height = imagesy($img);
+
+ if ($this->params['cropImage'] === 'no')
+ {
+ $scale = min($this->params['imgWidth']/$width, $this->params['imgHeight']/$height);
+ }
+ else if ($this->params['cropImage'] === 'yes')
+ {
+ $scale = max($this->params['imgWidth']/$width, $this->params['imgHeight']/$height);
+ }
+
+ if ($scale < 1) {
+
+ $xSrc = 0;
+ $ySrc = 0;
+
+ if ($this->params['cropImage'] === 'no')
+ {
+ $newWidth = floor($scale*$width);
+ $newHeight = floor($scale*$height);
+ }
+ else if ($this->params['cropImage'] === 'yes')
+ {
+
+ $newWidth = $this->params['imgWidth'];
+ $newHeight = $this->params['imgHeight'];
+ $oldWidth = $width;
+ $oldHeight = $height;
+ $width = floor($newWidth/$scale);
+ $height = floor($newHeight/$scale);
+
+ switch ($this->params['horizAlign'])
+ {
+ case 'left':
+ $xSrc = 0;
+ break;
+ case 'right':
+ $xSrc = floor(($oldWidth-$width));
+ break;
+ case 'center':
+ $xSrc = floor(($oldWidth-$width)/2);
+ break;
+ default:
+ $xSrc = $this->params['horizAlign'];
+ }
+
+ switch ($this->params['vertAlign'])
+ {
+ case 'top':
+ $ySrc = 0;
+ break;
+ case 'bottom':
+ $ySrc = floor(($oldHeight-$height));
+ break;
+ case 'center':
+ $ySrc = floor(($oldHeight-$height)/2);
+ break;
+ default:
+ $ySrc = $this->params['vertAlign'];
+ }
+
+ }
+
+ //temp image
+ $tmpImg = imagecreatetruecolor($newWidth, $newHeight);
+
+ //copy and resize
+ imagecopyresized($tmpImg, $img, 0, 0, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height);
+ imagedestroy($img);
+ $img = $tmpImg;
+ }
+
+ }
+
+ if (!$img) {
+ $img = imagecreate($this->params['imgWidth'], $this->params['imgHeight']);
+ imagecolorallocate($img,200,200,200);
+ }
+
+ //print the image
+ header("Content-type: image/jpeg");
+ imagejpeg($img);
+
+ }
+
+} \ No newline at end of file
diff --git a/admin/Library/Image/Gd/index.html b/admin/Library/Image/Gd/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/admin/Library/Image/Gd/index.html
@@ -0,0 +1 @@
+