zoukankan      html  css  js  c++  java
  • 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. 解决PHP剪切缩略图生成png,gif透明图时,黑色背景问题

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

    注:

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

    ----2016-03-13 更新

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

    1. PHP图片裁剪与缩放 / 无损裁剪图片
    2. PHP剪切缩略图生成png,gif透明图时,黑色背景有关问题
  • 相关阅读:
    flush()方法
    多对一关联映射(manytoone)
    Hibernate配置数据库解决插入乱码问题
    lazy
    一对多关联映射(单向)
    属性类的映射
    多对多关联(双向)
    多对多关联映射(单向)
    多态查询
    Visual C# 2008+SQL Server 2005 数据库与网络开发11.2.2 LINQ的基本查询操作
  • 原文地址:https://www.cnblogs.com/fsong/p/5243154.html
Copyright © 2011-2022 走看看