因为个人不是对PS熟悉,不清楚如何在PS中生成一张横向有序的spirte图片,使用了"css sprite V4.3"版本,生成的图片会出现压缩图片大小的情况,本想修改原作者开发的程序,但是不懂C#,只好使用PHP gd库进行生成css spirte图片。

  1. <?php
  2. header("Content-type: image/png");
  3. $path = "output";//建议这个文件目录下放入所有需要生成css spirte的图片
  4.  
  5. //循环源文件目录
  6. $handle = opendir($path);
  7. $files = array();
  8. //读入源目录下的所有文件
  9. while(false !== ($file = readdir($handle))) {
  10. if ($file != '.' && $file != '..') {
  11. $filename = $path . "/" . $file;
  12. if(is_file($filename)) {
  13. //$files[] = $filename;
  14. $files[] = str_replace(".png","",$file);
  15. }else {
  16. //$files = array_merge($files, get_files($filename));
  17. //$files = array_merge($files, str_replace(".png","",$file));
  18. }
  19. }
  20. } // end while
  21. closedir($handle);
  22.  
  23. sort($files);
  24.  
  25. //图片裁剪
  26. // 缩略后的大小
  27. /*$xx = 79;
  28. $yy = 214;
  29. foreach($files as $key=>$value){
  30. //var_dump(getimagesize($value));
  31. $src = $path.'/' . $value.'.png';
  32. list($src_w,$src_h)=getimagesize($src);
  33. $img = imagecreatefrompng($src);
  34. imagesavealpha($img,true);
  35. //很重要;
  36. $newImg = imagecreatetruecolor($xx ,$yy);
  37. imagealphablending($newImg,false);
  38. //很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色;
  39. imagesavealpha($newImg,true);
  40. //很重要,意思是不要丢了$newImg图像的透明色;
  41. imagecopy($newImg,$img,0,0,0,0,$src_w,$src_h);
  42. imagepng($newImg,$path.'/test/'.$value.'.png');
  43. //imagedestroy($newImg);
  44.  
  45. }
  46. exit();*/
  47.  
  48. foreach($files as $key=>&$value){
  49. //var_dump(getimagesize($value));
  50. $value = $path.'/' . $value.'.png';
  51. }
  52. unset($value);
  53. $bgImageSize = 0; //透明背景的宽度
  54. $bgImageHeight = 0; //透明底的高度
  55. foreach($files as $key=>$value){
  56. //var_dump(getimagesize($value));
  57. $source[$key]['source'] = imagecreatefrompng($value);
  58. $source[$key]['size'] = getimagesize($value);
  59. $imageInfo = $source[$key]['size'];
  60. $bgImageSize += $imageInfo[0];
  61. if($imageInfo[1] > $bgImageHeight){
  62. $bgImageHeight = $imageInfo[1];
  63. }
  64. }
  65.  
  66. $img = imagecreatetruecolor($bgImageSize, $bgImageHeight);
  67. imagesavealpha($img,true);
  68. imagealphablending($img,false);//这里很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色;
  69. imagesavealpha($img,true);//这里很重要,意思是不要丢了$thumb图像的透明色;
  70.  
  71. $source = array();
  72.  
  73. foreach($files as $key=>$value){
  74. //var_dump(getimagesize($value));
  75. $source[$key]['source'] = imagecreatefrompng($value);
  76. $source[$key]['size'] = getimagesize($value);
  77. }
  78.  
  79. $dst_y = 0; //图片之间的间距
  80.  
  81. foreach($source as $key=>$value){
  82. //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 )
  83. $sourceInfo = $source[$key]['size'];
  84. $dst_x = $key * $sourceInfo[0];
  85. imagecopy($img, $source[$key]['source'], $dst_x, $dst_y, 0, 0, $sourceInfo[0], $sourceInfo[1]);
  86. }
  87. //定为文件名
  88. $date = date("ymd_His").'_'.mt_rand(0,10);
  89. imagepng($img,'image'.$date.'.png');
  90. imagedestroy($img);

随笔参考

  1. 解决PHP剪切缩略图生成png,gif透明图时,黑色背景问题

  2. PHP遍历文件的4种方法

注:

1. 我的output目录下是,我放的是手动修改成文件名有序的文件,故code中没有文件名排序部分,图片是从Flash cs6中编辑fla"导出Sprite"获取到的。

----2016-03-13 更新

处理了剪切图片部分,剪切部分参考了:

  1. PHP图片裁剪与缩放 / 无损裁剪图片
  2. PHP剪切缩略图生成png,gif透明图时,黑色背景有关问题

PHP 简易读取文件目录下的文件,生成css spirte图片的更多相关文章

  1. 读取ClassPath下resource文件的正确姿势

    1.前言 为什么要写这篇文章?身为Java程序员你有没有过每次需要读取 ClassPath 下的资源文件的时候,都要去百度一下,然后看到下面的这种答案: Thread.currentThread(). ...

  2. SpringBoot项目构建成jar运行后,如何正确读取resource下的文件

    SpringBoot项目构建成jar运行后,如何正确读取resource下的文件 不管你使用的是SpringBoot 1.x还是SpringBoot2.x,在开Dev环境中使用eclipse.IEAD ...

  3. 多文件目录下makefile文件递归执行编译所有c文件

    首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的. 意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文 ...

  4. 【转】多文件目录下makefile文件递归执行编译所有c文件

    首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的. 意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文 ...

  5. php读取目录下的文件

    工作需要写了一个读取指定目录下的文件,并显示列表,点击之后读取文件中的内容 高手拍砖,目录可以自由指定,我这里直接写的是获取当前文件目录下面的所有文件 <?php /** * 读取指定目录下面的 ...

  6. XE7 & IOS开发之开发账号(3):证书、AppID、设备、授权profile的申请使用,附Debug真机调试、Ad hoc下iPA文件生成演示(XCode5或以上版本推荐,有图有真相)

    网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 注意,以下讨论都是以&q ...

  7. 【转】SpringBoot——web项目下读取classpath下的文件心得

    在读取springBoot+gradle构建的项目时,如果使用传统的FileInputStream读取文件流或者ResourceUtils工具类的方式,都会失败,下面解释原因: 一.读取文件的三种方式 ...

  8. Java读取classpath下的文件

    写Java程序时会经常从classpath下读取文件,是时候该整理一下了,并在不断深入的过程中,陆续补充上. 现在Java project 都以maven项目居多, 比如像下面这样的一个项目结构: 编 ...

  9. Spring项目读取resource下的文件

    目录 一.前提条件 二.使用ClassPathResource类读取 2.1.Controller.service中使用ClassPathResource 2.2.单元测试使用ClassPathRes ...

随机推荐

  1. MultiByteToWideChar和WideCharToMultiByte用法详解

    今天写ini文件的时候发现的问题: TCHAR temp[]; //strcpy_s(temp, request.newVersion); MultiByteToWideChar(CP_ACP, , ...

  2. Solution for latex error:”Unknown graphics extension: .eps“ or "Can not find XXX"

    Sample code: \begin{figure*} \centering % Requires \usepackage{graphicx} \includegraphics[width=7in] ...

  3. HW5.28

    public class Solution { public static void main(String[] args) { System.out.printf("%s\t%s\n&qu ...

  4. php透明合并png与jpg图片

    源 <?php $png = imagecreatefrompng('./mark.png'); $jpeg = imagecreatefromjpeg('./image.jpg'); list ...

  5. AVR ISP

    1.ISP下载说明: 2.配置时钟熔丝: 时钟不可乱配置,最好是内部或是外部晶震,配置成其它的有可能会锁死ISP,如果锁死只能用外加时钟(8MHz以下的)才可以ISP,M8没有Jtag.

  6. matlab color_rain colorbar

    来自http://www.aos.wisc.edu/~dvimont/matlab/Graphics_Tools/color_rain.html Listing of script color_rai ...

  7. SPOJ - OTOCI LCT

    OTOCI Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/problem/viewProblem. ...

  8. HDU 5433 Xiao Ming climbing dp

    Xiao Ming climbing Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/ ...

  9. C++中的new与delete总结

    1. operator new.operator delete与new.delete操作符的区别: operator new的作用类似于malloc,负责分配内存:operator delete的作用 ...

  10. POJ_1365_Prime_Land

    //懒得解释 #include <iostream> #include <cstring> #include <cmath> #include <cstdio ...