代码如下 | 复制代码 |
/*===================== //验证码图片生成 session_start(); ?> |
代码如下 | 复制代码 |
class resizeimage { //图片类型 var $type; //实际宽度 var $width; //实际高度 var $height; //改变后的宽度 var $resize_width; //改变后的高度 var $resize_height; //是否裁图 var $cut; //源图象 var $srcimg; //目标图象地址 var $dstimg; //圆角源 var $corner; var $im; function resizeimage($img, $corner, $wid, $hei,$c, $corner_radius, $angle) { $this->srcimg = $img; $this->corner = $corner; $this->resize_width = $wid; $this->resize_height = $hei; $this->cut = $c; $this->corner_radius = $corner_radius; $this->angle = $angle; //图片的类型 $this->type = substr(strrchr($this->srcimg,"."),1); //初始化图象 $this->initi_img(); //目标图象地址 $this -> dst_img(); //-- $this->width = imagesx($this->im); $this->height = imagesy($this->im); //生成图象 $this->newimg(); imagedestroy ($this->im); } function newimg() { //改变后的图象的比例 $resize_ratio = ($this->resize_width)/($this->resize_height); //实际图象的比例 $ratio = ($this->width)/($this->height); if(($this->cut)=="1") //裁图 { if($ratio>=$resize_ratio) //高度优先 { $newimg = imagecreatetruecolor($this->resize_width,$this->resize_height); imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width,$this->resize_height, (($this->height)*$resize_ratio), $this->height); $tmp = $this->rounded_corner($newimg,$this->resize_width); imagepng ($tmp,$this->dstimg); } if($ratio<$resize_ratio) //宽度优先 { $newimg = imagecreatetruecolor($this->resize_width,$this->resize_height); imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width, $this->resize_height, $this->width, (($this->width)/$resize_ratio)); $tmp = $this->rounded_corner($newimg); imagepng ($tmp,$this->dstimg); } } else |
本款是一款php 读取目录下图像文件哦,代码,他利用了opendir来打开目录然后获取文件后缀名,判断是否为指定文件。
代码如下 | 复制代码 |
$directory = 'gallery'; $allowed_types=array('jpg','jpeg','gif','png'); $dir_handle = @opendir($directory) or die("there is an error with your image directory!"); while ($file = readdir($dir_handle)) $title = implode('.',$file_parts); closedir($dir_handle); |
图象缩略函数
参数说明:
代码如下 | 复制代码 |
$srcfile 原图地址; $dir 新图目录 $thumbwidth 缩小图宽最大尺寸 $thumbheitht 缩小图高最大尺寸 $ratio 默认等比例缩放 为1是缩小到固定尺寸。 */ function makethumb($srcfile,$dir,$thumbwidth,$thumbheight,$ratio=0) { //判断文件是否存在 if (!file_exists($srcfile))return false; //生成新的同名文件,但目录不同 $imgname=explode('/',$srcfile); $arrcount=count($imgname); $dstfile = $dir.$imgname[$arrcount-1]; //缩略图大小 $tow = $thumbwidth; $toh = $thumbheight; if($tow < 40) $tow = 40; if($toh < 45) $toh = 45; //获取图片信息 $im =''; if($data = getimagesize($srcfile)) { if($data[2] == 1) { $make_max = 0;//gif不处理 if(function_exists("imagecreatefromgif")) { $im = imagecreatefromgif($srcfile); } } elseif($data[2] == 2) { if(function_exists("imagecreatefromjpeg")) { $im = imagecreatefromjpeg($srcfile); } } elseif($data[2] == 3) { if(function_exists("imagecreatefrompng")) { $im = imagecreatefrompng($srcfile); } } } if(!$im) return ''; $srcw = imagesx($im); $srch = imagesy($im); $towh = $tow/$toh; $srcwh = $srcw/$srch; if($towh <= $srcwh){ $ftow = $tow; $ftoh = $ftow*($srch/$srcw); } else { $ftoh = $toh; $ftow = $ftoh*($srcw/$srch); } if($ratio){ $ftow = $tow; $ftoh = $toh; } //缩小图片 if($srcw > $tow || $srch > $toh || $ratio) { if(function_exists("imagecreatetruecolor") && function_exists("imagecopyresampled") && @$ni = imagecreatetruecolor($ftow, $ftoh)) { imagecopyresampled($ni, $im, 0, 0, 0, 0, $ftow, $ftoh, $srcw, $srch); } elseif(function_exists("imagecreate") && function_exists("imagecopyresized") && @$ni = imagecreate($ftow, $ftoh)) { imagecopyresized($ni, $im, 0, 0, 0, 0, $ftow, $ftoh, $srcw, $srch); } else { return ''; } if(function_exists('imagejpeg')) { imagejpeg($ni, $dstfile); } elseif(function_exists('imagepng')) { imagepng($ni, $dstfile); } }else { //小于尺寸直接复制 copy($srcfile,$dstfile); } imagedestroy($im); if(!file_exists($dstfile)) { return ''; } else { return $dstfile; } } |
?>
这是一款办外开的经典的php生成缩略图类函数,文件灵活实用,可以生成任何风格的图片,并且 可以把文本转换成图形。
copyright : smart-info limited. all right reserved.
author : jacky cheung
version : 1.1
create date : 24 september 2008
last modify : 15 march 2009
*/
class gd
{
var $font_face = "";
var $text = "";
var $size = 12;
var $color = "#000000";
var $angle = 0;
var $width = 0;
var $height = 0;
var $line_height = 0;
var $type = "png";
var $chmod = 0777;
var $bg_color = "#ffffff";
var $quality = 95;
var $antialias = true;
var $x = 0;
var $y = 0;
/*___| convert text to image |___*/
public function text2image ( $font_face="", $text="", $attributes=false, $width=0, $all=false )
{
$this->font_face = $font_face;
$this->text = $text;
$this->width = $width;
$this->size = 12;
$this->color = "#000000";
$this->angle = 0;
$this->line_height = 0;
$this->setprop ( $attributes );
if ( $this->width == 0 )
{
return $this->convert_text2image ( $this->text, $this->check_text_width( $this->text ) );
} else {
// word wrap
if ( $all === false )
{
$text = split(" ", $this->text);
$text = $this->word_wrap($this->text, $this->width, "<br>");
$text = split("<br>", $text );
} else if ( $all === true ) {
$temp = array();
for ( $i=0; $i<strlen($this->text); $i++ )
{
array_push ( $temp, mb_substr($this->text, $i, 1, "utf-8") );
}
$text = array();
$count_width = 0;
$i = 0;
foreach ( $temp as $k => $t )
{
$prop = $this->check_text_width($t);
if ( $count_width + floatval($prop["width"]) < $this->width )
{
$text[$i] = $text[$i] . $t;
$count_width += floatval($prop["width"]);
} else {
$count_width = 0;
$i++;
$text[$i] = "";
}
}
}
$img = array();
foreach ( $text as $k => $t )
{
$img[$k] = $this->convert_text2image ( $t, $this->check_text_width( $t ) );
}
$w = 0;
$h = 0;
foreach ( $img as $k => $v )
{
$w = (imagesx($img[$k]) > $w) ? imagesx($img[$k]) : $w;
if ($this->line_height == 0 ) $h += imagesy($img[$k]);
else $h += ($k < count($img)-1) ? $this->line_height : imagesy($img[$k]);
}
$base_img = $this->createtransparent($w, $h);
$locy = 0;
foreach ( $img as $k => $v )
{
if ($k > 0)
{
$locy = ($this->line_height == 0) ? $locy + imagesy($img[$k]) : $locy + $this->line_height;
}
$base_img = $this->attachgdimage ( $img[$k], $base_img, array ("x"=>0, "y"=>$locy) );
}
return $base_img;
}
}
private function word_wrap( $str, $width, $break )
{
$formatted = '';
$position = -1;
$prev_position = 0;
$last_line = -1;
/// looping the string stop at each space
while( $position = mb_stripos( $str, " ", ++$position, 'utf-8' ) ) {
if( $position > $last_line + $width + 1 ) {
$formatted.= mb_substr( $str, $last_line + 1, $prev_position - $last_line - 1, 'utf-8' ).$break;
$last_line = $prev_position;
}
$prev_position = $position;
}
/// adding last line without the break
$formatted.= mb_substr( $str, $last_line + 1, mb_strlen( $str ), 'utf-8' );
return $formatted;
}
public function convert_text2image ( $text, $prop )
{
$im = imagecreatetruecolor ( $prop["width"], $prop["height"] );
$rgb = $this->getrgb ( $this->color );
$color = imagecolorallocate ( $im, $rgb["red"], $rgb["green"], $rgb["blue"] );
$img = $this->createtransparent ( $prop["width"], $prop["height"] );
imagettftext ( $img, $this->size, $this->angle, 0, $prop["height"] - abs ( $prop["top"] ), $color, $this->font_face, $text );
return $img;
}
public function check_text_width ( $text )
{
$prop = array();
$bbox = imagettfbbox ( $this->size, $this->angle, $this->font_face, $text );
$prop["left"] = $bbox[0];
$prop["right"] = $bbox[2];
$prop["top"] = $bbox[1];
$prop["bottom"] = $bbox[7];
$padding = 2;
$prop["width"] = abs($prop["left"]) + abs($prop["right"]) + $padding;
$prop["height"] = abs($prop["top"]) + abs($prop["bottom"]) + $padding;
return $prop;
}
/*___| save to image file |___*/
public function save($gdimage, $filename, $attributes=false)
{
$this->type = "png";
$this->chmod = 0777;
$this->bg_color = "#ffffff";
$this->quality = 95;
$this->antialias = true;
$this->setprop ( $attributes );
// process
switch ( strtolower ( $this->type ) )
{
case "jpeg":
case "jpg":
$gdimage = $this->createbackground($gdimage, imagesx($gdimage), imagesy($gdimage));
imagejpeg ( $gdimage, $filename, $this->quality );
break;
case "gif":
$gdimage = $this->createbackground($gdimage, imagesx($gdimage), imagesy($gdimage));
imagegif ( $gdimage, $filename );
break;
case "png":
default :
imagepng ( $gdimage, $filename );
break;
}
chmod ( $filename, $this->chmod );
}
/*___| create gd background image |___*/
public function createbackground($gdimage, $width, $height)
{
$img = imagecreatetruecolor ( $width, $height );
$rgb = $this->getrgb ( $this->bg_color );
$color = imagecolorallocate ( $img, $rgb["red"], $rgb["green"], $rgb["blue"] );
imagefill ( $img, 0, 0, $color );
imagecopyresampled ( $img, $gdimage, 0, 0, 0, 0, $width, $height, $width, $height );
return $img;
}
/*___| create gd transparent image |___*/
public function createtransparent($width, $height)
{
$img = imagecreatetruecolor($width, $height);
imagealphablending($img, false);
imagesavealpha($img, true);
$transparent = imagecolorallocatealpha($img, 0, 0, 0, 127);
imagefilledrectangle($img, 0, 0, $width, $height, $transparent);
imagecopyresampled($img, $img, 0, 0, 0, 0, $width, $height, $width, $height);
return $img;
}
/*___| load image |___*/
public function createimagefrom($filename, $alpha=true)
{
if ( function_exists ( "exif_imagetype" ) )
{
if ( exif_imagetype ( $filename ) == imagetype_jpeg ) { return $this->createfromjpeg ( $filename ); }
else if ( exif_imagetype ( $filename ) == imagetype_gif ) { return $this->createfromgif ( $filename ); }
else if ( exif_imagetype ( $filename ) == imagetype_png ) { return $this->createfrompng ( $filename, $alpha ); }
}
else
{
if ( strstr ( strtoupper ( $filename ) , ".jpg" ) || strstr ( strtoupper ( $filename ), ".jpeg" )) { return $this->createfromjpeg ( $filename ); }
else if ( strstr ( strtoupper ( $filename ) , ".gif" )) { return $this->createfromgif ( $filename ); }
else if ( strstr ( strtoupper ( $filename ) , ".png" )) { return $this->createfrompng ( $filename, $alpha ); }
}
return false;
}
private function createfromjpeg ( $filename ) { return imagecreatefromjpeg ( $filename ); }
private function createfromgif ( $filename ) { return imagecreatefromgif ( $filename ); }
private function createfrompng ( $filename, $alpha=true )
{
if ( $alpha )
{
list ( $width, $height ) = getimagesize ( $filename );
$png_img = imagecreatefrompng ( $filename );
$img = imagecreatetruecolor ( $width, $height );
imagealphablending ( $img, false );
imagesavealpha ( $img, true );
imagecopyresampled ( $img, $png_img, 0, 0, 0, 0, $width, $height, $width, $height );
} else {
$img = imagecreatefrompng ( $filename );
}
return $img;
}
/*___| attach background image |___*/
public function attachbackgroundimage ( $gdimage, $filename, $attributes=false )
{
$this->x = 0;
$this->y = 0;
$this->setprop ( $attributes );
$img = $this->createimagefrom ( $filename );
imagecopyresampled ( $img, $gdimage, $this->x, $this->y, 0, 0, imagesx($gdimage), imagesy($gdimage), imagesx($gdimage), imagesy($gdimage) );
return $img;
}
/*___| attach image |___*/
public function attachimage ( $source, $target, $filename, $image_attributes=false, $attributes=false )
{
$source_img = $this->createimagefrom ( $source );
$target_img = $this->attachbackgroundimage ( $source_img, $target, $attributes );
$this->save ( $target_img, $filename, $image_attributes );
}
/*___| attach gd image resource |___*/
public function attachgdimage ( $gd_source, $gd_target, $attributes=false )
{
$this->x = 0;
$this->y = 0;
$this->width = 0;
$this->height = 0;
$this->setprop ( $attributes );
imagealphablending($gd_target, true );
imagealphablending($gd_source, true );
imagecopy ( $gd_target, $gd_source, $this->x, $this->y, 0, 0, imagesx($gd_source), imagesy($gd_source) );
return $gd_target;
}
/*___| get rgb color |___*/
public function getrgb($hex)
{
$rgb["red"] = hexdec ( substr ( $hex, 1, 2 ) ) ;
$rgb["green"] = hexdec ( substr ( $hex, 3, 2 ) ) ;
$rgb["blue"] = hexdec ( substr ( $hex, 5, 2 ) ) ;
return $rgb;
}
/*___| set properties |___*/
private function setprop ( $attributes=false )
{
if ( $attributes ) { foreach ( $attributes as $key => $value ) { $k = strtoupper ( $key ); $this->$k = $value; } }
}
}
//调用 方法
代码如下 | 复制代码 |
$imgresize = new imagetransform(); $imgresize->sourcefile = $source.$file; $imgresize->targetfile = $destination.$file; $imgresize->chmodvalue = 0777; $imgresize->resizetowidth = $tw; $imgresize->resizetoheight = $th; $imgresize->jpegoutputquality = 100; $imgresize->resizeifsmaller = false; $imgresize->resize(); |
?>