目的:

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

功能:

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

  将分割出的多张图片嵌套进公共的活动模版里,并为每张图片设置上要跳转的链接,直接生成页面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. P1776 宝物筛选_NOI导刊2010提高(02)&& 多重背包二进制优化

    多重背包, 要求 \(N\log N\) 复杂度 Solution 众所周和, \(1-N\) 之内的任何数可以由 \(2^{0}, 2^{1}, 2^{2} ... 2^{\log N}, N - ...

  2. Windows Server环境下消息队列之ActiveMQ实战

    环境准备 1.安装jdk1.7+ 2.下载新版ActiveMQ http://activemq.apache.org/ 3.启动activemq服务 4.启动成功后的界面是  5.启动成功后 浏览器访 ...

  3. 《设计模式》-原则五:合成/聚合复用原则(CARP)

    这个也好理解 ,这个合成/聚合复用原则指的是在一个新的对象里面使用一些已有的对象,使其成为新对象的一部分.新对象通过委派达到复用已有功能的效果. 说到这里要讲提及到“Has-A” 和“Is-A”的区别 ...

  4. JavaScript实现单向链表

    JavaScript 本身提供了十分好用的数据类型,以满足大家的日常使用.单靠 Array  和 Object 也的确足够应付日常的绝大部分需求,这也导致了很多前端er对数据结构这一块不是十分的了解. ...

  5. 20145234黄斐《Java程序设计》第五周

    教材学习内容总结 第八章部分 - 异常处理 语法与继承架构 使用try...catch 首先要明确一点:Java中所有错误都会打包为对象 JVM会尝试执行try区块中的程序代码,如果发生错误,执行程序 ...

  6. laravel更新某一个或几个字段

    //更新会员状态status $ary_where = array(); $ary_where[] = ['id', '=', $int_id]; $result = $this->obj_ad ...

  7. 数据库(二)之SQL Server

    什么是SQL SERVER?  Microsoft发布的SQL Server产品是一个典型的关系型数据库管理系统.  功能强大  操作简便  可靠的安全性 SQL Server 2008体系结构  S ...

  8. HDU 1561 The more, The Better (有依赖背包 || 树形DP)

    题目链接 Problem Description ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物.但由于地理位 ...

  9. MySQL防范SQL注入风险

    MySQL防范SQL注入风险 0.导读 在MySQL里,如何识别并且避免发生SQL注入风险 1.关于SQL注入 互联网很危险,信息及数据安全很重要,SQL注入是最常见的入侵手段之一,其技术门槛低.成本 ...

  10. 最长上升子序列O(nlogn) 要强的T^T(2358)

    题目来源:http://www.fjutacm.com/Problem.jsp?pid=2358 要强的T^T TimeLimit:1000MS  MemoryLimit:65536K 64-bit ...