用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目录是要写的权限

文件在这里

 

时间: 2024-11-05 09:23:49

用php切割大图片为成规则的小图的相关文章

Css调整图片大小[将大图片压缩成小图片]

<div style="width:设置宽px; height:设置高px; background-image: url('图片路径'); filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='图片路径',sizingMethod='scale'); float:left;background-size:设置宽px 设置高px;"> </div> 采用滤镜[filter]效果,实现大图片压缩

滤镜实现图片大小[可以将大图片压缩成小图片]

<div style="width:设置宽px; height:设置高px; background-image: url('图片路径');filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='图片路径',sizingMethod='scale');float:left;background-size:设置宽px 设置高px;">

有效解决Android加载大图片时内存溢出的问题

首先解析一下基本的知识: 位图模式,bitmap颜色位数是1位 灰度模式,bitmap颜色位数是8位,和256色一样 RGB模式,bitmap颜色位数是24位 在RGB模式下,一个像素对应的是红.绿.蓝三个字节 CMYK模式,bitmap颜色位数是32位  在CMYK模式下,一个像素对应的是青.品.黄.黑四个字节 图像文件的字节数(Byte) = 图像分辨率*颜色深度/8(bit/8) 例如:一幅640*480图像分辨率.RGB色一般为24位真彩色,图像未经压缩的数据容量为:640X480X24

Android调用系统相机、自定义相机、处理大图片

Android调用系统相机和自定义相机实例 本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显示出来,该例子也会涉及到Android加载大图片时候的处理(避免OOM),还有简要提一下有些人SurfaceView出现黑屏的原因. Android应用拍照的两种方式,下面为两种形式的Demo展示出来的效果.    知识点: 一.调用系统自带的相机应用 二.自定义我们自己的拍照界面 三.关于计算机解析图片原理(如何正确加载图片到Android应用中) 所需

HTML5将图片转化成字符画

HTML5将图片转化成字符画 字符画大家一定非常熟悉了,那么如何把一张现有的图片转成字符画呢?HTML5让这个可能变成了现实,通过canvas,可以很轻松实现这个功能.其实原理很简单:扫描图片相应位置的像素点,再计算出其灰度值,根据灰度值的大小,分别用字符#*+“和空格来填充.下面是源码:HTML:一个canvas元素#cv,一个字符画容器#txt . 1 <canvas id="cv">fuck ie</canvas> 2 <div id="t

关于大图片居中显示~适应移动端

今天修改项目的时候碰到一个问题,移动端点击小图片后,打开一个大图片显示:由于这个大图片的比例是不确定的,所以如何显示就成了一个问题. 最初的这个功能是设置了一个css3的属性,然后在Android手机上出了问题, -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; 然后我查了一下这个属性: 因为版本的原因,一些Android机没法使用这个属性. 我找了找居中显示的资料,看了看百度图片的图片显示方

[转] 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果 ---张鑫旭

by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3804 去年盛夏之时,曾写过“小tip: 使用CSS将图片转换成黑白”一文,本文的模式以及内容其实走得是类似路线.CSS3 → SVG → IE filter → canvas. 前段时间,iOS7不是瓜未熟就落地了嘛,然后捡瓜的人很多,然后国内外开始了各种探讨,从界面到动画,从兼容到实现等.其中,“毛玻璃”一次梆梆出世

shell入门-tr替换字符和split切割大文件

命令:tr 说明:替换字符 格式tr ‘原字符’ ‘新字符’ 可以是范围字符,指定字符 命令:split 选项:-b 50m 1.txt  根据大小分割 单位是b不用单位,单位是兆加m -l 100  1.txt    根据行数分割 说明:切割大文件,源文件不会消失, [[email protected] ~]# ls *.txt1.txt [2345].txt 2.txt 999.txt c.txt D.txt[[email protected] ~]# ls *.txt |tr 'a-z'

centos下 将(jgp、png)图片转换成webp格式

由于项目要求需要将jpg.png类型的图片  转换成webp格式,最开始使用了php gd类库里 imagewebp 方法实现,结果发现转换成的webp格式文件会偶尔出现空白内容的情况.像创建了一个透明图层的图片,但是尺寸和内存确跟转换成功的文件一般无二. 初想,可以找个办法判断一下图片是否无效的,网上找各种办法,结果无果.虽然失败了但是还是上一下代码,期待大神能协助完善方法. function imgToWebp($file=''){ if(is_file($file)){ $img = ge