|
|
图片的分割与组合 |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
我这里只考虑jpg,gif,png格式.
<?php /** * @author iwind [email protected] */ class Image { var $ext; var $i_ext; var $width; var $height; var $create_func; var $out_func;
function image_load($files) { $file = (is_array($files))?$files[0]:$files; $info = getimagesize($file); switch ($info[2]) { case "1": $this->ext = "gif"; $this->i_ext = "gif"; break; case "2": $this->ext = "jpg"; $this->i_ext = "jpeg"; break; case "3": $this->ext = "png"; $this->i_ext = "png"; break; default: $this->ext = "jpg"; $this->i_ext = "jpeg"; } $this->create_func = "imagecreatefrom" . $this->i_ext; $this->out_func = "image" . $this->i_ext; $this->width = $info[0]; $this->height = $info[1]; }
function image_split($photo, $x_num=1, $y_num=1) { $this->image_load($photo); eval("\$im=" . $this->create_func . "(\$photo);"); $x_width = $this->width/$x_num; $y_height = $this->height/$y_num; $im1 = imagecreate($x_width, $y_height); $files = array(); for ($i=0; $i<$x_num; $i++) { for ($j=0; $j<$y_num; $j++) { $x = $i * $x_width; $y = $j * $y_height; imagecopyresampled($im1, $im, 0, 0, $x, $y, $x_width, $y_height, $x_width, $y_height); $new_file = "{$i}_{$j}.{$this->ext}"; $files[] = $new_file; eval("{$this->out_func}(\$im1, \$new_file);"); } } imagedestroy($im1); return $files; }
function image_join($files, $new_file) { if (!empty($files)) { $this->image_load($files); $i_arr = array(); $j_arr = array(); foreach ($files as $v) { list($v1) = explode(".", $v); list($i_arr[], $j_arr[]) = explode("_", $v1); } $i_arr = array_unique($i_arr); $j_arr = array_unique($j_arr); $x_num = count($i_arr); $y_num = count($j_arr); $im1 = imagecreate($x_num * $this->width, $y_num * $this->height); foreach ($i_arr as $i) { foreach ($j_arr as $j) { $x = $i * $this->width; $y = $j * $this->height; eval("\$im = {$this->create_func}(" . "\"{$i}_{$j}.{$this->ext}\");"); imagecopyresampled($im1, $im, $x, $y, 0, 0, $this->width, $this->height, $this->width, $this->height); } } eval("{$this->out_func}(\$im1, \$new_file);"); } } }
//创建一个实例 $img = new image();
//将 20041099024319.jpg 分成 2 * 3部分,即宽两部分,高三部分 //$files 是文件名数组 $files = $img->image_split("20041099024319.jpg", 2 , 3);
//将分成的小图重新组起来,名称为 new.jpg $img->image_join($files, "new.jpg");
// echo "success......"; ?> 
|
|
相关文章:相关软件: |
|