目的:

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

功能:

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

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

  

使用PHP写了一个图片分割等份工具,便于前台页面切图时使用。的更多相关文章

  1. 切图时图片的选择:JPG、PNG、GIF的区别

    目前网站图片的采用一共有流行三种,分别是JPG.PNG.GIF,然而很多人并不知道三者在选择的时候究竟应该选谁.虽然都可以存储图片,但是如果要发布到网上,就必须考虑速度.大小和失真程度的问题.如果你运 ...

  2. 自己写了一个图片的马赛克消失效果(jQuery)

    其中的一个效果: html代码: <h1>单击图片,产生效果</h1> <div class="box"></div> 插件代码: ...

  3. 用python DIY一个图片转pdf工具并打包成exe

    最近因为想要看漫画,无奈下载的漫画是jpg的格式,网上的转换器还没一个好用的,于是乎就打算用python自己DIY一下: 这里主要用了reportlab.开始打算随便写几行,结果为若干坑纠结了挺久,于 ...

  4. 调用百度API写了一个js翻译小工具

    目前还未完成的功能有:textarea高度自适应,移动端与pc端都写了.效果如图: html: <!DOCTYPE html> <html lang="en"&g ...

  5. 自己写了一个mysql连接的工具类【java】

    要用的话,包名自己可以改一下: package com.usa3v.dreamcenter.util; import java.sql.Connection; import java.sql.Driv ...

  6. WPF 把图片分割成两份自动翻页 WpfFlipPageControl:CtrlBook 书控件

    原文:WPF 把图片分割成两份自动翻页 WpfFlipPageControl:CtrlBook 书控件 版权声明:本文为博主原创文章,需要转载尽管转载. https://blog.csdn.net/z ...

  7. 做一个会PS切图的前端开发

    系列链接 做一个会使用PS的前端开发 做一个会PS切图的前端开发 切图方法分类 PhotoShop从CS版本演变到现在的CC版本,切图功能发生了比较大的变化,我们可以把PhotoShop CS版本时的 ...

  8. 我的第一个python web开发框架(18)——前台页面与接口整合

    由于我们前后台系统没有分开,所以前台页面调用接口时,可以直接使用后台管理系统已经完成的接口,不过后台管理系统接口的访问加上了登录验证,所以需要将前台要用到的接口进行处理,让它们设置到白名单当中 我们打 ...

  9. 用 EPWA 写一个 图片播放器 PicturePlayer

    用 EPWA 写一个 图片播放器  PicturePlayer  . 有关 EPWA,见 <我发起并创立了一个 EPWA 的 开源项目>   https://www.cnblogs.com ...

随机推荐

  1. nltk_29_pickle保存和导入分类器

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&am ...

  2. Java基础-字符串连接运算符String link operator

    Java基础-字符串连接运算符String link operator 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 字符串链接运算符是通过“+”进行拼接的. 一.使用“+”进行字 ...

  3. python---CMDB配置管理数据库

    前戏:项目目的 是一个运维自动化管理项目: 为了减少人工干预,降低人员成本 ---资产管理 --操作管理 避免人员直接操作服务器,使用后台去统一操作 一:实现方式 (一)Agent基于shell命令实 ...

  4. codevs 3235 战争

    3235 战争 http://codevs.cn/problem/3235/  时间限制: 2 s  空间限制: 128000 KB   题目描述 Description 2050年,人类与外星人之间 ...

  5. 数学建模 数据包络分析(DEA) Lingo实现

    model: sets: dmu/../:lambda; !决策单元; inw/../:s1; !投入变量集; outw/../:s2; !产出变量集; inv(inw, dmu):x; !投入数据; ...

  6. http请求头和响应头详细解释

    想对http请求头和响应头有更细致的了解,请看如下 Requests部分 Header 解释 示例 Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/htm ...

  7. spring框架学习(七)spring管理事务方式之xml配置

    1.DAO AccountDao.java package cn.mf.dao; public interface AccountDao { //加钱 void increaseMoney(Integ ...

  8. MySQL在net中Datatime转换

    <add name="adDb"         connectionString="Persist Security Info=False;database=ad ...

  9. Javascript的V8引擎研究

    1.针对上下文的Snapshot技术 什么是上下文(Contexts)?实际是JS应用程序的运行环境,避免应用程序的修改相互影响,例如一个页面js修改内置对象方法toString,不应该影响到另外页面 ...

  10. ASP.NET对无序列表批量操作的三种方法

    在网页开发中,经常要用到无序列表.事实上在符合W3C标准的div+css布局中,无序列表被大量使用,ASP.NET虽然内置了BulletedList控件,用于创建和操作无序列表,但感觉不太好用.本篇介 ...