目的:

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

功能:

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

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

    public class Geometry { public Geometry(string name, Data data, Hashtable hash) { Debug.Log("解析 ...

  2. Docker生产实践(六)

    镜像构建思路 思路:分层设计 最底层:系统层,构建自己适用的不同操作系统镜像: 中间层:根据运行环境,如php.java.python等,构建业务基础运行环境层镜像: 最上层:根据具体的业务模块,构建 ...

  3. Java基础-IO流对象之字节流(Stream)

    Java基础-IO流对象之字节流(Stream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在前面我分享的笔记中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现 ...

  4. Spring 手动提交事务

    在使用Spring声明式事务时,不需要手动的开启事务和关闭事务,但是对于一些场景则需要开发人员手动的提交事务,比如说一个操作中需要处理大量的数据库更改,可以将大量的数据库更改分批的提交,又比如一次事务 ...

  5. javamail模拟邮箱功能--邮件回复-中级实战篇【邮件回复方法】(javamail API电子邮件实例)

    引言: JavaMai下载地址l jar包:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...

  6. angularJS $routeProvider

    O'Reilly书上的伪代码 var someModule = angular.module('someModule',[...module dependencies]); someModule.co ...

  7. c# net 使用反射为对象赋值

    public T Bson2T(MongoDB.Bson.BsonDocument bson) { T t = default(T); //获取T类中的所有属性 PropertyInfo[] Tpro ...

  8. 关于node的setTimeout的延时最大限制

    node的setTimeout有最大值限制,最大值为2^31-1.一旦超过了最大值,其效果就跟延时值为0的情况一样,也就是马上执行.chrome测试并未发现该问题,解决方案如下,重写setTimeou ...

  9. [php]mysql操作流程

    这种是比较老的一种mysql连接方法 1.连接数据库 $this->con = mysql_connect($this->host, $this->user, $this->p ...

  10. for-in 和 for

    本文地址:http://www.cnblogs.com/veinyin/p/8745845.html  1 for for ( var i = 0 ; i < len ; i++ ) for 是 ...