From 07f5140771388c9e0c8a99b0dd2e5d950bdb173b Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Thu, 14 Oct 2021 15:16:42 +1100 Subject: moving h-source subdir out. --- Library/Image/Gd/Captcha.php | 103 +++++++++++++++++++ Library/Image/Gd/Thumbnail.php | 220 +++++++++++++++++++++++++++++++++++++++++ Library/Image/Gd/index.html | 1 + Library/Image/index.html | 1 + 4 files changed, 325 insertions(+) create mode 100644 Library/Image/Gd/Captcha.php create mode 100644 Library/Image/Gd/Thumbnail.php create mode 100644 Library/Image/Gd/index.html create mode 100644 Library/Image/index.html (limited to 'Library/Image') diff --git a/Library/Image/Gd/Captcha.php b/Library/Image/Gd/Captcha.php new file mode 100644 index 0000000..1e8d706 --- /dev/null +++ b/Library/Image/Gd/Captcha.php @@ -0,0 +1,103 @@ +. + +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, + 'sessionKey' => 'captchaString', + ); + + //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[$this->params['sessionKey']] = $this->string; + header('Content-Type: image/png'); + imagepng($img); + imagedestroy($img); + } + +} \ No newline at end of file diff --git a/Library/Image/Gd/Thumbnail.php b/Library/Image/Gd/Thumbnail.php new file mode 100644 index 0000000..22e501e --- /dev/null +++ b/Library/Image/Gd/Thumbnail.php @@ -0,0 +1,220 @@ +. + +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' => null, + 'imgHeight' => null, + 'defaultImage' => null, + 'cropImage' => 'no', + 'horizAlign' => 'left', + 'vertAlign' => 'top', + 'resample' => 'yes', + 'function' => 'none', + 'outputFormat' => 'jpeg', + ); + + //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 + //$outputFile: the name of the output file + public function render($imageFile, $outputFile = null) + { + $imagePath = $this->basePath . basename($imageFile); + + if (!file_exists($imagePath) and isset($this->params['defaultImage'])) $imagePath = $this->params['defaultImage']; + + $img = null; + $type = 'jpeg'; + $contentType = 'image/jpeg'; + + if (file_exists($imagePath)) + { + $ext = strtolower(end(explode('.', $imagePath))); + + if (strcmp($ext,'jpg') === 0 or strcmp($ext,'jpeg') === 0) { + $img = @imagecreatefromjpeg($imagePath); + $type = 'jpeg'; + $contentType = 'image/jpeg'; + } else if (strcmp($ext,'png') === 0) { + $img = @imagecreatefrompng($imagePath); + $type = 'png'; + $contentType = 'image/png'; + } else if (strcmp($ext,'gif') === 0) { + $img = @imagecreatefromgif($imagePath); + $type = 'gif'; + $contentType = 'image/gif'; + } + } + + //If an image was successfully loaded, test the image for size + if ($img) + { + //image size + $width = imagesx($img); + $height = imagesy($img); + + if (!isset($this->params['imgWidth'])) $this->params['imgWidth'] = $width; + if (!isset($this->params['imgHeight'])) $this->params['imgHeight'] = $height; + + 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); + + if ($this->params['resample'] === 'yes') + { + //copy and resample + imagecopyresampled($tmpImg, $img, 0, 0, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height); + } + else + { + //copy and resize + imagecopyresized($tmpImg, $img, 0, 0, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height); + } + imagedestroy($img); + $img = $tmpImg; + + if (!function_exists($this->params['function'])) { + throw new Exception('Error in '.__METHOD__.': function '.$this->params['function']. ' does not exist'); + } + + $img = call_user_func($this->params['function'],$img); + } + + } + + if (!$img) + { + $imgWidth = isset($this->params['imgWidth']) ? $this->params['imgWidth'] : 100; + $imgHeight = isset($this->params['imgHeight']) ? $this->params['imgHeight'] : 100; + + $img = imagecreate($imgWidth, $imgHeight); + imagecolorallocate($img,200,200,200); + } + + //print the image + if (!isset($outputFile)) + { + header("Content-type: $contentType"); + } + + if (strcmp($type,'png') === 0) + { + imagepng($img,$outputFile,9); + } + else if (strcmp($type,'gif') === 0) + { + imagegif($img,$outputFile); + } + else + { + imagejpeg($img,$outputFile,90); + } + } + +} \ No newline at end of file diff --git a/Library/Image/Gd/index.html b/Library/Image/Gd/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Image/Gd/index.html @@ -0,0 +1 @@ + diff --git a/Library/Image/index.html b/Library/Image/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Image/index.html @@ -0,0 +1 @@ + -- cgit v1.2.3