• 使用PHP写了一个图片分割等份工具,便于前台页面切图时使用。


    目的:

      由于网站更新活动较频繁,其大多数以静态图片为主,设计人员在除了设计图后都要给前端制作人员再次切图从而达到页面加载图片缓慢的问题,为了减少工作量做了该工具。

    功能:

         上传一张图,将其分割成指定等份的小图。

      将分割出的多张图片嵌套进公共的活动模版里,并为每张图片设置上要跳转的链接,直接生成页面html

    预览图:

      

    主要实现代码:

    /**
     * Created by PhpStorm.
     * User: Administrator
     * Date: 14-3-26
     * Time: 下午6:31
     */
    //处理图像分割8等分,每等份加链接
    class dopic {
        public $path = './static/file/';                  //大图路径
        public $filename = '';                     //大图名字
        public $newpath = './static/result/';             //新的小图存放目录
        public $exNum = array(1,2,3,4,5,6,7,8);   //每等份图的名字
        public $htmlpath = './static/html/';              //生成html的目录
        public $templatedir = './static/';  //html模版目录
        public $templatefile = 'edm.htm';  //html模版目录
        public $links = '';             //链接地址
        public $htmlfilename = '';                 //生成html的文件名称
    
        public function __construct () {
            ini_set( 'memory_limit', '220M' );
        }
        //分割图片8等份
        public function explodepic () {
            $file = $this->path.$this->filename;    //大图文件地址
            $filePre = explode('.', $this->filename);   //获取大图文件名
            $newfile = $this->newpath.$filePre[0];      //获取小图存放路径,以大图文件名为名称创建一个目录
            self::create_dir($newfile);     //创建小图存放路径
            $ext = $this->getExt($this->filename);
            //获取大图的尺寸
            list($width, $height, $type, $attr) = getimagesize($file);
            //算出每等份尺寸,
            //不被整除,保证不留白
            $minW = $width;
            $minHx = ceil ($height / count($this->exNum));
            //分别截取出小图
            $bigpic = imagecreatefromjpeg($file);
            $smallpic = imagecreatetruecolor($minW, $minHx); //新建一个图像
            for ($i = 0; $i < count($this->exNum); $i++) {
                if ($i == (count($this->exNum)-1)) {
                    $minH = $height - $minHx * $i;
                    $smallpic = imagecreatetruecolor($minW, $minH); //新建一个图像
                } else {
                    $minH = $minHx;
                }
                imagecopy($smallpic, $bigpic ,0,0,0,($i*$minHx), $minW, $minH);   //复制图像一部分
                imagejpeg($smallpic, $newfile.'/'.$this->exNum[$i].'.jpg',100);    //输出小图
            }
            return $newfile;
        }
    
        //生成html
        public function mkHtml() {
            $str = file_get_contents('http://'.$_SERVER['HTTP_HOST'].ltrim($this->templatedir, '.').$this->templatefile);
            $newstr = str_replace("#areplace", $this->links, $str);
            $fname = $this->getfilename($this->filename);
            $newstr = str_replace("#filename",$fname , $newstr);
            self::create_dir($this->htmlpath.$fname);
            file_put_contents($this->htmlpath.$fname.'/index.html', $newstr);
            return $this->htmlpath.$fname.'/index.html';
        }
    
        //获取文件名部分
        public function getfilename ($filename) {
            $res = explode('.', $filename);
            return $res[0];
        }
    
        //创建目录
        public function create_dir($dir){
            return is_dir($dir) or (self::create_dir(dirname($dir))and mkdir($dir, 0777));
        }
        /**
         *函数:getExt()
         *@param:$filename文件名称
         *@return:返回上传文件的扩展名称
         */
        public  function getExt($filename){
            $array = explode('.', $filename);
            $ext = array_pop($array);
            return strtolower($ext);
        }
    
        /**
         * @desc 保存生成的图片
         * @access private setPic()
         * @param $imgSource 图像的资源
         * @param $path 要保存的图片路径地址和名称
         * @param $ext 要保存路径的扩展名称
         */
        private function setPic($imgSource, $path, $ext){
            switch (strtolower($ext)){
                case 'jpg':
                case 'jpeg':
                    return imagejpeg($imgSource,$path);
                    break;
                case 'gif' :
                    return imagegif($imgSource, $path);
                    break;
                case 'png' :
                    return imagepng($imgSource, $path);
                    break;
                default :
                    $this->getErrorInfo("暂不支持你的扩展名称,请尝试jpg,gif,png");
            }
        }
        /**
         *函数:getErrorInfo()
         *@param:$error错误信息
         *@return:返回错误信息
         */
        public function getErrorInfo($error){
            echo '<script type="text/javascript">alert("错误信息:'.$error.'");</script>';
            exit();
        }
    }
    @session_start();
    if (isset($_SESSION['images']) && !empty($_SESSION['images']) && isset($_POST['links'])) {
        //获取提交的表单数据
        $links = $_POST['links'];
        if ($links == '') {
            echo '<script>alert("链接不能为空");</script>';
            exit;
        }
        $filename = $_SESSION['images'];
        //测试
        $res = new dopic();
        $res->filename = $filename;
        $res->links = $links;
        $newfile = $res->explodepic();
        $html = $res->mkHtml();
        $_SESSION['url'] = 'http://'.$_SERVER['HTTP_HOST'].$html;
        header('Location:index.php');
    }

      如果还想有继续研究的,请下载附件。

      附件下载地址:http://files.cnblogs.com/guangxiaoluo/edmtools.rar

      

  • 相关阅读:
    【BZOJ4444】国旗计划
    NOIp模拟赛三十一
    [arc086e]snuke line
    NOIp模拟赛三十
    [agc004f]namori
    [agc004d]salvage robot
    [agc016b]colorful hats
    NOIp模拟赛二十九
    [arc082f]sandglass
    Oracle性能报告--ASH
  • 原文地址:https://www.cnblogs.com/guangxiaoluo/p/3638590.html
Copyright © 2020-2023  润新知