php 分割/切割图片

php分割图片,实例1:

<?php
	$width = 950;
	$height = 100;

	$source = @imagecreatefromjpeg( "bg_1.jpg" );
	$source_width = imagesx( $source );
	$source_height = imagesy( $source );

	for( $col = 0; $col < $source_width / $width; $col++)
	{
		for( $row = 0; $row < $source_height / $height; $row++)
		{
			$fn = sprintf( "img%02d_%02d.png", $col, $row );

			echo( "$fn\n" );

			$im = @imagecreatetruecolor( $width, $height );
			imagecopyresized( $im, $source, 0, 0,
				$col * $width, $row * $height, $width, $height,
				$width, $height );
			imagejpeg( $im, $fn );
			imagedestroy( $im );
			}
		}
		?>

分割图片实例2:

<?php
/**
 * 将大图片自动切割成一定比例的小图片
 * 并按照一定规则给小图片命名
 * 
 * 使用方法:
 * 先拷贝大图片到init文件夹下 命名为 1.jpg , 2.jpg .....
 * 浏览器输入地址 img.php
 * 生成小图片于文件夹 temp/zoom1,temp/zoom2.... 下面
 * 
 * 注:需要GD2支持
 * 作者:阿义
 */

header("Cache-Control:no-cache,must-revalidate"); //不使用缓存
//要切割的图片
if (isset($_GET['flag'])) {
    $flag=$_GET['flag'];
}else {
    $flag=1;
}
$filename="init/".$flag.".jpg";//大图文件
$tempdir="temp/zoom".$flag;//小图存放目录

//判断文件是否存在 不存在就切割完毕
if(!file_exists($filename)){
    if($flag==1){
        exit('<p align=center>请确认大图是否位于map/init 下并命名为 1.jpg,2.jpg.......</p>');
    }else{
        exit('<p align=center>图片切割完毕</p>');
    }
}else{
    if(!file_exists($tempdir)) mkdir($tempdir);
    echo "<p align=center>正在切割第".$flag."张大图</p>";
}

/********************************************************************/
$picW=256;                                    //切割小图的宽
$picH=256;                                    //切割小图的高
ini_set( 'memory_limit', '220M' );            //为支持大图片增加内存限制
/********************************************************************/

//获取大图片的属性
list($width, $height, $type, $attr) = getimagesize($filename);
//从$filename创建一新图像
$image = imagecreatefromjpeg($filename);

//循环截取大图中的每一部分,生成小图
for ($i=0;$i<ceil($width/$picW);$i++){
    for ($j=0;$j<ceil($height/$picH);$j++){
        $im = @imagecreatetruecolor($picW, $picH) or die("Cannot Initialize new GD image stream");//创建小图像
        $colBG = imagecolorallocate($im, 255, 255, 255);//白色背景
        imagefill( $im, 0, 0, $colBG );//加白色背景
        $picX=($picW*($i+1))<$width?$picW:($picW+$width-$picW*($i+1));//获取截取图片的宽度
        $picY=($picH*($j+1))<$height?$picH:($picH+$height-$picH*($j+1));//获取截取图片的高度
        imagecopy ( $im, $image, 0, 0, ($picW*$i), ($picH*$j), $picX, $picY );//拷贝大图片的一部分到小图片
        imagejpeg($im,$tempdir."/".$j.",".$i.".jpg",75);//创建小图片到磁盘,输出质量为75(0~100)
    }
}
imagedestroy($im);//释放与 $im 关联的内存
imagedestroy($image);//释放与 $image 关联的内存
//跳转到下一张大图
echo "<script language='JavaScript'>window.location.href='img.php?flag=".($flag+1)."'</script>";
?>

php合并图片实例1

<?php
	$targetsize_x = 4000;
	$targetsize_y = 4000;
	$outfile = "merged.jpg";
	$quality = 100;

	$im = @imagecreatetruecolor( $targetsize_x, $targetsize_y );
	
	$sources = array();
	$dh = opendir( "." );
	while (($file = readdir($dh)) !== false)
	{
		if ( preg_match( "/[.]jpg$/", $file ) &&
			$file!= $outfile )
		{
			$sources []= imagecreatefromjpeg( $file );
		}
	}
	
	$x = 0;
	$y = 0;
	$index = 0;
	while( true )
	{
		$width = imagesx( $sources[ $index ] );
		$height = imagesy( $sources[ $index ] );
		
		imagecopy( $im, $sources[ $index ],
			$x, $y, 0, 0, $width, $height );
			
		$x += $width;
		if ( $x >= $targetsize_x )
		{
			$x = 0;
			$y += $height;
			if ( $y >= $targetsize_y )
				break;
		}

		$index += 1;
		if ( $index >= count( $sources ) )
			$index = 0;
	}

	imagejpeg( $im, $outfile, $quality );

	imagedestroy( $im );
	?>

发表评论

电子邮件地址不会被公开。 必填项已用*标注