Server : Apache System : Linux iZ2vcgyutqttsd1p850kl8Z 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01 UTC 2023 x86_64 User : www ( 1000) PHP Version : 5.6.40 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv Directory : /www/wwwroot/saimikebio.com/mobile/include/kernel/library/ |
<?php // +---------------------------------------------------------------------- // | EcTouch [ 专注移动电商: 商创网络科技 ] // +---------------------------------------------------------------------- // | Copyright (c) 2014 http://ectouch.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: EcTouch Team <zhong@ecmoban.com> (QQ: 2880175560) // +---------------------------------------------------------------------- //生成图像缩略图和生成验证码 class Image { //生成图像验证码 static public function buildImageVerify($width = 48, $height = 22, $randval = NULL, $verifyName = 'verify') { if (!isset($_SESSION)) { session_start(); //如果没有开启,session,则开启session } $randval = empty($randval) ? ("" . rand(1000, 9999)) : $randval; $_SESSION[$verifyName] = $randval; $length = 4; $width = ($length * 10 + 10) > $width ? $length * 10 + 10 : $width; $im = imagecreate($width, $height); $r = array(225, 255, 255, 223); $g = array(225, 236, 237, 255); $b = array(225, 236, 166, 125); $key = mt_rand(0, 3); $backColor = imagecolorallocate($im, $r[$key], $g[$key], $b[$key]); //背景色(随机) $borderColor = imagecolorallocate($im, 100, 100, 100); //边框色 $pointColor = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); //点颜色 @imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor); @imagerectangle($im, 0, 0, $width - 1, $height - 1, $borderColor); $stringColor = imagecolorallocate($im, mt_rand(0, 200), mt_rand(0, 120), mt_rand(0, 120)); // 干扰 for ($i = 0; $i < 10; $i++) { $fontcolor = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); imagearc($im, mt_rand(-10, $width), mt_rand(-10, $height), mt_rand(30, 300), mt_rand(20, 200), 55, 44, $fontcolor); } for ($i = 0; $i < 25; $i++) { $fontcolor = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $pointColor); } for ($i = 0; $i < $length; $i++) { imagestring($im, 5, $i * 10 + 5, mt_rand(1, 8), $randval{$i}, $stringColor); } self::output($im, 'png'); } //生成缩略图 static public function thumb($image, $thumbname, $domain = 'public', $maxWidth = 200, $maxHeight = 50, $interlace = true) { // 获取原图信息 $info = self::getImageInfo($image); if ($info !== false) { $srcWidth = $info['width']; $srcHeight = $info['height']; $type = strtolower($info['type']); $interlace = $interlace ? 1 : 0; unset($info); $scale = min($maxWidth / $srcWidth, $maxHeight / $srcHeight); // 计算缩放比例 if ($scale >= 1) { // 超过原图大小不再缩略 $width = $srcWidth; $height = $srcHeight; } else { // 缩略图尺寸 $width = (int) ($srcWidth * $scale); $height = (int) ($srcHeight * $scale); } //sae平台上图片处理 if (class_exists('SaeStorage')) { $saeStorage = new SaeStorage(); $saeImage = new SaeImage(); $saeImage->setData(file_get_contents($image)); $saeImage->resize($width, $height); $thumbname = str_replace(array('../', './'), '', $thumbname); return $saeStorage->write($domain, $thumbname, $saeImage->exec()); } // 载入原图 $createFun = 'ImageCreateFrom' . ($type == 'jpg' ? 'jpeg' : $type); $srcImg = $createFun($image); //创建缩略图 if ($type != 'gif' && function_exists('imagecreatetruecolor')) { $thumbImg = imagecreatetruecolor($width, $height); } else { $thumbImg = imagecreate($width, $height); } // 复制图片 if (function_exists("ImageCopyResampled")) { imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight); } else { imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight); } if ('gif' == $type || 'png' == $type) { $background_color = imagecolorallocate($thumbImg, 0, 255, 0); // 指派一个绿色 imagecolortransparent($thumbImg, $background_color); // 设置为透明色,若注释掉该行则输出绿色的图 } // 对jpeg图形设置隔行扫描 if ('jpg' == $type || 'jpeg' == $type) { imageinterlace($thumbImg, $interlace); } $dir = dirname($thumbname); if (!is_dir($dir)) { @mkdir($dir, 0777, true); } // 生成图片 $imageFun = 'image' . ($type == 'jpg' ? 'jpeg' : $type); $imageFun($thumbImg, $thumbname); imagedestroy($thumbImg); imagedestroy($srcImg); return $thumbname; } return false; } /** * 图片水印 * @$image 原图 * @$water 水印图片 * @$$waterPos 水印位置(0-9) 0为随机,其他代表上中下9个部分位置 */ static public function water($image, $water, $waterPos = 9) { //检查图片是否存在 if (!file_exists($image) || !file_exists($water)) return false; //读取原图像文件 $imageInfo = self::getImageInfo($image); $image_w = $imageInfo['width']; //取得水印图片的宽 $image_h = $imageInfo['height']; //取得水印图片的高 $imageFun = "imagecreatefrom" . $imageInfo['type']; $image_im = $imageFun($image); //读取水印文件 $waterInfo = self::getImageInfo($water); $w = $water_w = $waterInfo['width']; //取得水印图片的宽 $h = $water_h = $waterInfo['height']; //取得水印图片的高 $waterFun = "imagecreatefrom" . $waterInfo['type']; $water_im = $waterFun($water); switch ($waterPos) { case 0: //随机 $posX = rand(0, ($image_w - $w)); $posY = rand(0, ($image_h - $h)); break; case 1: //1为顶端居左 $posX = 0; $posY = 0; break; case 2: //2为顶端居中 $posX = ($image_w - $w) / 2; $posY = 0; break; case 3: //3为顶端居右 $posX = $image_w - $w; $posY = 0; break; case 4: //4为中部居左 $posX = 0; $posY = ($image_h - $h) / 2; break; case 5: //5为中部居中 $posX = ($image_w - $w) / 2; $posY = ($image_h - $h) / 2; break; case 6: //6为中部居右 $posX = $image_w - $w; $posY = ($image_h - $h) / 2; break; case 7: //7为底端居左 $posX = 0; $posY = $image_h - $h; break; case 8: //8为底端居中 $posX = ($image_w - $w) / 2; $posY = $image_h - $h; break; case 9: //9为底端居右 $posX = $image_w - $w; $posY = $image_h - $h; break; default: //随机 $posX = rand(0, ($image_w - $w)); $posY = rand(0, ($image_h - $h)); break; } //设定图像的混色模式 imagealphablending($image_im, true); imagecopy($image_im, $water_im, $posX, $posY, 0, 0, $water_w, $water_h); //拷贝水印到目标文件 //生成水印后的图片 $bulitImg = "image" . $imageInfo['type']; $bulitImg($image_im, $image); //释放内存 $waterInfo = $imageInfo = null; imagedestroy($image_im); } static protected function getImageInfo($img) { $imageInfo = getimagesize($img); if ($imageInfo !== false) { $imageType = strtolower(substr(image_type_to_extension($imageInfo[2]), 1)); $imageSize = filesize($img); $info = array( "width" => $imageInfo[0], "height" => $imageInfo[1], "type" => $imageType, "size" => $imageSize, "mime" => $imageInfo['mime'] ); return $info; } else { return false; } } static protected function output($im, $type = 'png', $filename = '') { header("Content-type: image/" . $type); $ImageFun = 'image' . $type; if (empty($filename)) { $ImageFun($im); } else { $ImageFun($im, $filename); } imagedestroy($im); exit; } } ?>