PHP 简易读取文件目录下的文件,生成css spirte图片
因为个人不是对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 67 $img = imagecreatetruecolor($bgImageSize, $bgImageHeight); 68 imagesavealpha($img,true); 69 imagealphablending($img,false);//这里很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色; 70 imagesavealpha($img,true);//这里很重要,意思是不要丢了$thumb图像的透明色; 71 72 $source = array(); 73 74 foreach($files as $key=>$value){ 75 //var_dump(getimagesize($value)); 76 $source[$key]['source'] = imagecreatefrompng($value); 77 $source[$key]['size'] = getimagesize($value); 78 } 79 80 $dst_y = 0; //图片之间的间距 81 82 foreach($source as $key=>$value){ 83 //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 ) 84 $sourceInfo = $source[$key]['size']; 85 $dst_x = $key * $sourceInfo[0]; 86 imagecopy($img, $source[$key]['source'], $dst_x, $dst_y, 0, 0, $sourceInfo[0], $sourceInfo[1]); 87 } 88 //定为文件名 89 $date = date("ymd_His").'_'.mt_rand(0,10); 90 imagepng($img,'image'.$date.'.png'); 91 imagedestroy($img);
随笔参考
注:
1. 我的output目录下是,我放的是手动修改成文件名有序的文件,故code中没有文件名排序部分,图片是从Flash cs6中编辑fla"导出Sprite"获取到的。
----2016-03-13 更新
处理了剪切图片部分,剪切部分参考了: