PHP 简易读取文件目录下的文件,生成css spirte图片
因为个人不是对PS熟悉,不清楚如何在PS中生成一张横向有序的spirte图片,使用了"css sprite V4.3"版本,生成的图片会出现压缩图片大小的情况,本想修改原作者开发的程序,但是不懂C#,只好使用PHP gd库进行生成css spirte图片。
<?php
header("Content-type: image/png");
$path = "output";//建议这个文件目录下放入所有需要生成css spirte的图片 //循环源文件目录
$handle = opendir($path);
$files = array();
//读入源目录下的所有文件
while(false !== ($file = readdir($handle))) {
if ($file != '.' && $file != '..') {
$filename = $path . "/" . $file;
if(is_file($filename)) {
//$files[] = $filename;
$files[] = str_replace(".png","",$file);
}else {
//$files = array_merge($files, get_files($filename));
//$files = array_merge($files, str_replace(".png","",$file));
}
}
} // end while
closedir($handle); sort($files); //图片裁剪
// 缩略后的大小
/*$xx = 79;
$yy = 214;
foreach($files as $key=>$value){
//var_dump(getimagesize($value));
$src = $path.'/' . $value.'.png';
list($src_w,$src_h)=getimagesize($src);
$img = imagecreatefrompng($src);
imagesavealpha($img,true);
//很重要;
$newImg = imagecreatetruecolor($xx ,$yy);
imagealphablending($newImg,false);
//很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色;
imagesavealpha($newImg,true);
//很重要,意思是不要丢了$newImg图像的透明色;
imagecopy($newImg,$img,0,0,0,0,$src_w,$src_h);
imagepng($newImg,$path.'/test/'.$value.'.png');
//imagedestroy($newImg); }
exit();*/ foreach($files as $key=>&$value){
//var_dump(getimagesize($value));
$value = $path.'/' . $value.'.png';
}
unset($value);
$bgImageSize = 0; //透明背景的宽度
$bgImageHeight = 0; //透明底的高度
foreach($files as $key=>$value){
//var_dump(getimagesize($value));
$source[$key]['source'] = imagecreatefrompng($value);
$source[$key]['size'] = getimagesize($value);
$imageInfo = $source[$key]['size'];
$bgImageSize += $imageInfo[0];
if($imageInfo[1] > $bgImageHeight){
$bgImageHeight = $imageInfo[1];
}
} $img = imagecreatetruecolor($bgImageSize, $bgImageHeight);
imagesavealpha($img,true);
imagealphablending($img,false);//这里很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色;
imagesavealpha($img,true);//这里很重要,意思是不要丢了$thumb图像的透明色; $source = array(); foreach($files as $key=>$value){
//var_dump(getimagesize($value));
$source[$key]['source'] = imagecreatefrompng($value);
$source[$key]['size'] = getimagesize($value);
} $dst_y = 0; //图片之间的间距 foreach($source as $key=>$value){
//bool imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h )
$sourceInfo = $source[$key]['size'];
$dst_x = $key * $sourceInfo[0];
imagecopy($img, $source[$key]['source'], $dst_x, $dst_y, 0, 0, $sourceInfo[0], $sourceInfo[1]);
}
//定为文件名
$date = date("ymd_His").'_'.mt_rand(0,10);
imagepng($img,'image'.$date.'.png');
imagedestroy($img);
随笔参考
注:
1. 我的output目录下是,我放的是手动修改成文件名有序的文件,故code中没有文件名排序部分,图片是从Flash cs6中编辑fla"导出Sprite"获取到的。

----2016-03-13 更新
处理了剪切图片部分,剪切部分参考了:
PHP 简易读取文件目录下的文件,生成css spirte图片的更多相关文章
- 读取ClassPath下resource文件的正确姿势
1.前言 为什么要写这篇文章?身为Java程序员你有没有过每次需要读取 ClassPath 下的资源文件的时候,都要去百度一下,然后看到下面的这种答案: Thread.currentThread(). ...
- SpringBoot项目构建成jar运行后,如何正确读取resource下的文件
SpringBoot项目构建成jar运行后,如何正确读取resource下的文件 不管你使用的是SpringBoot 1.x还是SpringBoot2.x,在开Dev环境中使用eclipse.IEAD ...
- 多文件目录下makefile文件递归执行编译所有c文件
首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的. 意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文 ...
- 【转】多文件目录下makefile文件递归执行编译所有c文件
首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的. 意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文 ...
- php读取目录下的文件
工作需要写了一个读取指定目录下的文件,并显示列表,点击之后读取文件中的内容 高手拍砖,目录可以自由指定,我这里直接写的是获取当前文件目录下面的所有文件 <?php /** * 读取指定目录下面的 ...
- XE7 & IOS开发之开发账号(3):证书、AppID、设备、授权profile的申请使用,附Debug真机调试、Ad hoc下iPA文件生成演示(XCode5或以上版本推荐,有图有真相)
网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 注意,以下讨论都是以&q ...
- 【转】SpringBoot——web项目下读取classpath下的文件心得
在读取springBoot+gradle构建的项目时,如果使用传统的FileInputStream读取文件流或者ResourceUtils工具类的方式,都会失败,下面解释原因: 一.读取文件的三种方式 ...
- Java读取classpath下的文件
写Java程序时会经常从classpath下读取文件,是时候该整理一下了,并在不断深入的过程中,陆续补充上. 现在Java project 都以maven项目居多, 比如像下面这样的一个项目结构: 编 ...
- Spring项目读取resource下的文件
目录 一.前提条件 二.使用ClassPathResource类读取 2.1.Controller.service中使用ClassPathResource 2.2.单元测试使用ClassPathRes ...
随机推荐
- 【暑假】[深入动态规划]UVa 10618 Fun Game
UVa 10618 Fun Game 题目: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=36035 思路: 一圈人围坐 ...
- microsoft的罗马帝国——浪潮之巅
其实开始读微软的这篇已经比较久了,从来学校的前一天晚上等车的时候就开始读了,直到今天才看完.嗯,微软的确是个帝国. 那就从头开始讲把,关于帝国的传奇都是比较长的故事呢.至于我的叙述水平和我的知识水平都 ...
- Hibernate学习笔记(四)关系映射之一对一关联映射
一. 一对一关联映射 ² 两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ² 有两种策略可以实现一对一的关联映射 Ø 主键关联:即让 ...
- 洛谷 P1156 垃圾陷阱
2016-05-31 09:54:03 题目链接 :洛谷 P1156 垃圾陷阱 题目大意: 奶牛掉坑里了,给定坑的深度和方块的个数,每个方块都可以垫脚或者吃掉维持生命(初始为10) 若可以出来,求奶牛 ...
- C语言的格式控制符
1. 格式控制符 格式输出printf 作用是向终端输出若干个类型任意的数据. 格式:printf (格式控制符,输出列表) 1) 格式控制符 l % ...
- 如何用Java编写一段代码引发内存泄露
本文来自StackOverflow问答网站的一个热门讨论:如何用Java编写一段会发生内存泄露的代码. Q:刚才我参加了面试,面试官问我如何写出会发生内存泄露的Java代码.这个问题我一点思路都没有, ...
- 了解CSS/CSS3原生变量var
一.变量是个好东西 在任何语言中,变量的有一点作用都是一样的,那就是可以降低维护成本,附带还有更高性能,文件更高压缩率的好处. 随着CSS预编译工具Sass/Less/Stylus的关注和逐渐流行,C ...
- 手把手教你去ECSHOP版权 powered by ecshop
各位朋友大家好,欢迎来到ecshop开发中心系列视频教程:ecshop去版权.去版权是一种很常见的问题,有很多客户提到ECSHOP如何去版权?怎样去得干净.去得彻底?今天,ECSHOP开发中心手把 ...
- 使用hexdump 查看二进制文件
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- spring mvc处理json
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...