• 用php切割大图片为成规则的小图


    将根据xml配置,将合并后的大图切割成一系列小图

    <?php
    /**
     * 将大图片按照配置切割成一定比例的小图片
     * 并按照一定规则给小图片命名
     *
     * 使用方法:
     *根据guardians/g1目录下的Attack_1.xml配置切割Attack_1.png
     *也可批量切割(我写的是批量切割)
     *
     * 注:需要GD2支持
     */
    // echo "{${phpinfo()}}";
    header("Cache-Control:no-cache,must-revalidate"); //不使用缓存
    
    for ($i=1; $i < 100; $i++) { 
        $filename="guardians/g".$i."/Attack_1.png";//大图文件
        $tempdir="temp";//小图存放目录
        //判断文件是否存在 不存在就切割完毕
        if(file_exists($filename)){
            if(!file_exists($tempdir)) mkdir($tempdir);
        }
        $xml=simplexml_load_file("guardians/g".$i."/Attack_1.xml");
        echo "guardians/g".$i."/Attack_1.xml<br>";
        $j = 1;
        foreach($xml -> SubTexture as $SubTexture){
            $attri = $SubTexture->attributes();
            $picW=$attri->frameWidth;                                    //切割小图的宽
            $picH=$attri->frameHeight; 
            //为支持大图片增加内存限制
            ini_set( 'memory_limit', '220M' );                                    //切割小图的高
            echo $picW.",".$picH."<br>";
            list($width, $height, $type, $attr) = getimagesize($filename);
    
            $image = imagecreatefrompng($filename);
            //透明背景
            $im = imagecreatetruecolor((int)$picW, (int)$picH) or die("Cannot Initialize new GD image stream");//创建小图像
            imagealphablending($im, false);
            imagesavealpha($im, true);
            $white = imagecolorallocatealpha($im,255,255,255,127);
            imagefill($im,0,0,$white);
    
            $picX=$attri->width;//获取截取图片的宽度
            $picY=$attri->height;//获取截取图片的高度
             echo $picX.",".$picY."<br>";
            $frameX = $attri->frameX;
            $frameY = $attri->frameY;
            $x = $attri->x;
            $y = $attri->y;
    
            echo $frameX.",".$picY."<br>";
            imagecopy ( $im, $image, -(int)$frameX, -(int)$frameY, (int)$x, (int)$y, (int)$picX, (int)$picY );//拷贝大图片的一部分到小图片
            imagepng($im,$tempdir."/g".$i."_Attack_1_".$j.".png",0, 75);//创建小图片到磁盘,输出质量为75(0~100)
            echo $tempdir."/g".$i."_Attack_1_".$j.".png". "<br>";
            $j = $j + 1;
            imagedestroy($im);//释放与 $im 关联的内存
            imagedestroy($image);//释放与 $image 关联的内存
    
       }
    }
    
    echo " complate";
    ?>

    完成后会在temp目录下生成小图,确保temp目录是要写的权限

    文件在这里

     

    淡泊明志,宁静致远
  • 相关阅读:
    4. Median of Two Sorted Arrays
    680. Valid Palindrome II
    11. Container With Most Water
    10. Regular Expression Matching
    1_Utilities__deviceQuery + 1_Utilities__deviceQueryDrv + 1_Utilities__topologyQuery
    1_Utilities__bandwidthTest
    CUDA C Programming Guide 在线教程学习笔记 Part 11
    hdu 3790 最短路径问题
    hdu 1050 Moving Tables
    斯特林公式 hdu1018
  • 原文地址:https://www.cnblogs.com/lycokcc/p/4162444.html
Copyright © 2020-2023  润新知