《PHP應(yīng)用:常用的php圖片處理類(水印、等比縮放、固定高寬)分享》要點(diǎn):
本文介紹了PHP應(yīng)用:常用的php圖片處理類(水印、等比縮放、固定高寬)分享,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
PHP教程常用的php圖片處理類(水印、等比縮放、固定高寬)分享
PHP教程
<?php
//PHP 添加水印 & 比例縮略圖 & 固定高度 & 固定寬度 類.
class Image_process{
public $source; //原圖
public $source_width; //原圖寬度
public $source_height; //原圖高度
public $source_type_id;
public $orign_name;
public $orign_dirname;
//傳入原圖路徑
public function __construct($source){
$this->typeList = array(1=>'gif',2=>'jpg',3=>'png');
$ginfo = getimagesize($source);
$this->source_width = $ginfo[0];
$this->source_height = $ginfo[1];
$this->source_type_id = $ginfo[2];
$this->orign_url = $source;
$this->orign_name = basename($source);
$this->orign_dirname = dirname($source);
}
//判斷圖片的文件的格式,返回PHP可識(shí)別的編碼
public function judgeType($type,$source){
if($type == 1){
return imagecreatefromgif($source); //gif
}else if($type == 2){
return imagecreatefromjpeg($source); //jpg
}else if($type == 3){
return imagecreatefrompng($source); //png
}else{
return false;
}
}
//生成水印圖片
public function waterMakeImage($logo){
$linfo = getimagesize($logo);
$logo_width = $linfo[0];
$logo_height = $linfo[1];
$logo_type_id = $linfo[2];
$sourceHandle = $this->judgeType($this->source_type_id,$this->orign_url);
$logoHandle = $this->judgeType($logo_type_id,$logo);
if(!$sourceHandle || !$logoHandle){
return false;
}
$x = ($this->source_width - $logo_width)/2;
$y = ($this->source_height - $logo_height)/2;
imagecopy($sourceHandle,$logoHandle,$x,$y,0,0,$logo_width,$logo_height);
$newPic = $this->orign_dirname.'\water_'.time().'.'.$this->typeList[$this->source_type_id];
if($this->saveImage($sourceHandle,$newPic)){
imagedestroy($sourceHandle);
imagedestroy($logoHandle);
}
}
//固定高度寬度
public function fixSizeImage($width,$height){
if($width > $this->source_width) $this->source_width;
if($height > $this->source_height) $this->source_height;
if($width === false){
$width = floor($this->source_width / ($this->source_height / $height));
}
if($height === false){
$height = floor($this->source_height / ($this->source_width / $width));
}
$this->tinyImage($width,$height);
}
//等比例縮放圖片
public function scaleImage($scale){
$width = floor($this->source_width * $scale);
$height = floor($this->source_height * $scale);
$this->tinyImage($width, $height);
}
//創(chuàng)建縮略圖
public function tinyImage($width,$height){
$tinyImage = imagecreatetruecolor($width,$height);
$handle = $this->judgeType($this->source_type_id,$this->orign_url);
if(function_exists('imagecopyresampled')){
imagecopyresampled($tinyImage, $handle, 0, 0, 0, 0, $width, $height, $this->source_width, $this->source_height);
}else{
imagecopyresized($tinyImage, $handle, 0, 0, 0, 0, $width, $height, $this->source_width, $this->source_height);
}
$newPic = $this->orign_dirname.'\thumb_'.time().'_'.$width."_".$height.".".$this->typeList[$this->source_type_id];
if($this->saveImage($tinyImage,$newPic)){
imagedestroy($tinyImage);
imagedestroy($handle);
}
}
//保存圖片
private function saveImage($image,$url){
if(imagejpeg($image,$url)){
return true;
}
}
}
$imgHandle = new Image_process('D:\AppServ\www\test\getimg\14061907445601.jpg');
//$imgHandle->waterMakeImage('D:\AppServ\www\test\getimg\shougongke.png'); //生成水印圖片
//$imgHandle->fixSizeImage(200,150); //固定長(zhǎng)度圖片
$imgHandle->scaleImage(0.2); //等比例縮放
?>
PHP教程示例二:
PHP教程
<?php
/**
*
* 圖像處理類
* @author FC_LAMP
* @internal功能包含:水印,縮略圖
*/
class Img
{
//圖片格式
private $exts = array ('jpg', 'jpeg', 'gif', 'bmp', 'png' );
/**
*
*
* @throws Exception
*/
public function __construct()
{
if (! function_exists ( 'gd_info' ))
{
throw new Exception ( '加載GD庫(kù)失敗!' );
}
}
/**
*
* 裁剪壓縮
* @param $src_img 圖片
* @param $save_img 生成后的圖片
* @param $option 參數(shù)選項(xiàng),包括: $maxwidth 寬 $maxheight 高
* array('width'=>xx,'height'=>xxx)
* @internal
* 我們一般的壓縮圖片辦法,在圖片過(guò)長(zhǎng)或過(guò)寬時(shí)生成的圖片
* 都會(huì)被“壓扁”,針對(duì)這個(gè)應(yīng)采用先裁剪后按比例壓縮的辦法
*/
public function thumb_img($src_img, $save_img = '', $option)
{
if (empty ( $option ['width'] ) or empty ( $option ['height'] ))
{
return array ('flag' => False, 'msg' => '原圖長(zhǎng)度與寬度不能小于0' );
}
$org_ext = $this->is_img ( $src_img );
if (! $org_ext ['flag'])
{
return $org_ext;
}
//如果有保存路徑,則確定路徑是否正確
if (! empty ( $save_img ))
{
$f = $this->check_dir ( $save_img );
if (! $f ['flag'])
{
return $f;
}
}
//獲取出相應(yīng)的辦法
$org_funcs = $this->get_img_funcs ( $org_ext ['msg'] );
//獲取原大小
$source = $org_funcs ['create_func'] ( $src_img );
$src_w = imagesx ( $source );
$src_h = imagesy ( $source );
//調(diào)整原始圖像(保持圖片原形狀裁剪圖像)
$dst_scale = $option ['height'] / $option ['width']; //目標(biāo)圖像長(zhǎng)寬比
$src_scale = $src_h / $src_w; // 原圖長(zhǎng)寬比
if ($src_scale >= $dst_scale)
{ // 過(guò)高
$w = intval ( $src_w );
$h = intval ( $dst_scale * $w );
$x = 0;
$y = ($src_h - $h) / 3;
} else
{ // 過(guò)寬
$h = intval ( $src_h );
$w = intval ( $h / $dst_scale );
$x = ($src_w - $w) / 2;
$y = 0;
}
// 剪裁
$croped = imagecreatetruecolor ( $w, $h );
imagecopy ( $croped, $source, 0, 0, $x, $y, $src_w, $src_h );
// 縮放
$scale = $option ['width'] / $w;
$target = imagecreatetruecolor ( $option ['width'], $option ['height'] );
$final_w = intval ( $w * $scale );
$final_h = intval ( $h * $scale );
imagecopyresampled ( $target, $croped, 0, 0, 0, 0, $final_w, $final_h, $w, $h );
imagedestroy ( $croped );
//輸出(保存)圖片
if (! empty ( $save_img ))
{
$org_funcs ['save_func'] ( $target, $save_img );
} else
{
header ( $org_funcs ['header'] );
$org_funcs ['save_func'] ( $target );
}
imagedestroy ( $target );
return array ('flag' => True, 'msg' => '' );
}
/**
*
* 等比例縮放圖像
* @param $src_img 原圖片
* @param $save_img 需要保存的地方
* @param $option 參數(shù)設(shè)置 array('width'=>xx,'height'=>xxx)
*
*/
function resize_image($src_img, $save_img = '', $option)
{
$org_ext = $this->is_img ( $src_img );
if (! $org_ext ['flag'])
{
return $org_ext;
}
//如果有保存路徑,則確定路徑是否正確
if (! empty ( $save_img ))
{
$f = $this->check_dir ( $save_img );
if (! $f ['flag'])
{
return $f;
}
}
//獲取出相應(yīng)的辦法
$org_funcs = $this->get_img_funcs ( $org_ext ['msg'] );
//獲取原大小
$source = $org_funcs ['create_func'] ( $src_img );
$src_w = imagesx ( $source );
$src_h = imagesy ( $source );
if (($option ['width'] && $src_w > $option ['width']) || ($option ['height'] && $src_h > $option ['height']))
{
if ($option ['width'] && $src_w > $option ['width'])
{
$widthratio = $option ['width'] / $src_w;
$resizewidth_tag = true;
}
if ($option ['height'] && $src_h > $option ['height'])
{
$heightratio = $option ['height'] / $src_h;
$resizeheight_tag = true;
}
if ($resizewidth_tag && $resizeheight_tag)
{
if ($widthratio < $heightratio)
$ratio = $widthratio;
else
$ratio = $heightratio;
}
if ($resizewidth_tag && ! $resizeheight_tag)
$ratio = $widthratio;
if ($resizeheight_tag && ! $resizewidth_tag)
$ratio = $heightratio;
$newwidth = $src_w * $ratio;
$newheight = $src_h * $ratio;
if (function_exists ( "imagecopyresampled" ))
{
$newim = imagecreatetruecolor ( $newwidth, $newheight );
imagecopyresampled ( $newim, $source, 0, 0, 0, 0, $newwidth, $newheight, $src_w, $src_h );
} else
{
$newim = imagecreate ( $newwidth, $newheight );
imagecopyresized ( $newim, $source, 0, 0, 0, 0, $newwidth, $newheight, $src_w, $src_h );
}
}
//輸出(保存)圖片
if (! empty ( $save_img ))
{
$org_funcs ['save_func'] ( $newim, $save_img );
} else
{
header ( $org_funcs ['header'] );
$org_funcs ['save_func'] ( $newim );
}
imagedestroy ( $newim );
return array ('flag' => True, 'msg' => '' );
}
/**
*
* 生成水印圖片
* @param $org_img 原圖像
* @param $mark_img 水印標(biāo)記圖像
* @param $save_img 當(dāng)其目錄不存在時(shí),會(huì)試著創(chuàng)建目錄
* @param array $option 為水印的一些基本設(shè)置包含:
* x:水印的水平位置,默認(rèn)為減去水印圖寬度后的值
* y:水印的垂直位置,默認(rèn)為減去水印圖高度后的值
* alpha:alpha值(控制透明度),默認(rèn)為50
*/
public function water_mark($org_img, $mark_img, $save_img = '', $option = array())
{
//檢查圖片
$org_ext = $this->is_img ( $org_img );
if (! $org_ext ['flag'])
{
return $org_ext;
}
$mark_ext = $this->is_img ( $mark_img );
if (! $mark_ext ['flag'])
{
return $mark_ext;
}
//如果有保存路徑,則確定路徑是否正確
if (! empty ( $save_img ))
{
$f = $this->check_dir ( $save_img );
if (! $f ['flag'])
{
return $f;
}
}
//獲取相應(yīng)畫(huà)布
$org_funcs = $this->get_img_funcs ( $org_ext ['msg'] );
$org_img_im = $org_funcs ['create_func'] ( $org_img );
$mark_funcs = $this->get_img_funcs ( $mark_ext ['msg'] );
$mark_img_im = $mark_funcs ['create_func'] ( $mark_img );
//拷貝水印圖片坐標(biāo)
$mark_img_im_x = 0;
$mark_img_im_y = 0;
//拷貝水印圖片高寬
$mark_img_w = imagesx ( $mark_img_im );
$mark_img_h = imagesy ( $mark_img_im );
$org_img_w = imagesx ( $org_img_im );
$org_img_h = imagesx ( $org_img_im );
//合成生成點(diǎn)坐標(biāo)
$x = $org_img_w - $mark_img_w;
$org_img_im_x = isset ( $option ['x'] ) ? $option ['x'] : $x;
$org_img_im_x = ($org_img_im_x > $org_img_w or $org_img_im_x < 0) ? $x : $org_img_im_x;
$y = $org_img_h - $mark_img_h;
$org_img_im_y = isset ( $option ['y'] ) ? $option ['y'] : $y;
$org_img_im_y = ($org_img_im_y > $org_img_h or $org_img_im_y < 0) ? $y : $org_img_im_y;
//alpha
$alpha = isset ( $option ['alpha'] ) ? $option ['alpha'] : 50;
$alpha = ($alpha > 100 or $alpha < 0) ? 50 : $alpha;
//合并圖片
imagecopymerge ( $org_img_im, $mark_img_im, $org_img_im_x, $org_img_im_y, $mark_img_im_x, $mark_img_im_y, $mark_img_w, $mark_img_h, $alpha );
//輸出(保存)圖片
if (! empty ( $save_img ))
{
$org_funcs ['save_func'] ( $org_img_im, $save_img );
} else
{
header ( $org_funcs ['header'] );
$org_funcs ['save_func'] ( $org_img_im );
}
//銷毀畫(huà)布
imagedestroy ( $org_img_im );
imagedestroy ( $mark_img_im );
return array ('flag' => True, 'msg' => '' );
}
/**
*
* 檢查圖片
* @param unknown_type $img_path
* @return array('flag'=>true/false,'msg'=>ext/錯(cuò)誤信息)
*/
private function is_img($img_path)
{
if (! file_exists ( $img_path ))
{
return array ('flag' => False, 'msg' => "加載圖片 $img_path 失敗!" );
}
$ext = explode ( '.', $img_path );
$ext = strtolower ( end ( $ext ) );
if (! in_array ( $ext, $this->exts ))
{
return array ('flag' => False, 'msg' => "圖片 $img_path 格式不正確!" );
}
return array ('flag' => True, 'msg' => $ext );
}
/**
*
* 返回正確的圖片函數(shù)
* @param unknown_type $ext
*/
private function get_img_funcs($ext)
{
//選擇
switch ($ext)
{
case 'jpg' :
$header = 'Content-Type:image/jpeg';
$createfunc = 'imagecreatefromjpeg';
$savefunc = 'imagejpeg';
break;
case 'jpeg' :
$header = 'Content-Type:image/jpeg';
$createfunc = 'imagecreatefromjpeg';
$savefunc = 'imagejpeg';
break;
case 'gif' :
$header = 'Content-Type:image/gif';
$createfunc = 'imagecreatefromgif';
$savefunc = 'imagegif';
break;
case 'bmp' :
$header = 'Content-Type:image/bmp';
$createfunc = 'imagecreatefrombmp';
$savefunc = 'imagebmp';
break;
default :
$header = 'Content-Type:image/png';
$createfunc = 'imagecreatefrompng';
$savefunc = 'imagepng';
}
return array ('save_func' => $savefunc, 'create_func' => $createfunc, 'header' => $header );
}
/**
*
* 檢查并試著創(chuàng)建目錄
* @param $save_img
*/
private function check_dir($save_img)
{
$dir = dirname ( $save_img );
if (! is_dir ( $dir ))
{
if (! mkdir ( $dir, 0777, true ))
{
return array ('flag' => False, 'msg' => "圖片保存目錄 $dir 無(wú)法創(chuàng)建!" );
}
}
return array ('flag' => True, 'msg' => '' );
}
}
if (! empty ( $_FILES ['test'] ['tmp_name'] ))
{
//例子
$img = new Img ();
//原圖
$name = explode ( '.', $_FILES ['test'] ['name'] );
$org_img = 'D:/test.' . end ( $name );
move_uploaded_file ( $_FILES ['test'] ['tmp_name'], $org_img );
$option = array ('width' => $_POST ['width'], 'height' => $_POST ['height'] );
if ($_POST ['type'] == 1)
{
$s = $img->resize_image ( $org_img, '', $option );
} else
{
$img->thumb_img ( $org_img, '', $option );
}
unlink ( $org_img );
}
PHP教程以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡.
歡迎參與《PHP應(yīng)用:常用的php圖片處理類(水印、等比縮放、固定高寬)分享》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/10291.html