设为首页 收藏本站
查看: 1104|回复: 0

[经验分享] 使用PHP写了一个图片分割等份工具,便于前台页面切图时...

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-4-2 10:06:02 | 显示全部楼层 |阅读模式
目的:
  由于网站更新活动较频繁,其大多数以静态图片为主,设计人员在除了设计图后都要给前端制作人员再次切图从而达到页面加载图片缓慢的问题,为了减少工作量做了该工具。
功能:
     上传一张图,将其分割成指定等份的小图。
  将分割出的多张图片嵌套进公共的活动模版里,并为每张图片设置上要跳转的链接,直接生成页面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');
}
  如果还想有继续研究的,请下载附件。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-16678-1-1.html 上篇帖子: PHP获取客户端的真实IP 下篇帖子: php性能监控扩展xhprof 图片 前台
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表