-
-
/** - *
- * 이미지 처리 클래스
- * @author FC_LAMP
- * @internal 기능 포함: 워터마크, 썸네일
- */
- 클래스 이미지
- {
- / /그림 형식
- private $exts = 배열('jpg', 'jpeg', 'gif', 'bmp', 'png' );
>*/
- public function __construct()
- {
- if (! function_exists ( 'gd_info' ))
- {
- throw new Exception ( 'GD 라이브러리를 로드하지 못했습니다!' );
- }
- }
/**
- *
- * 자르기 및 압축
- * @param $src_img 이미지
- * @param $save_img 생성 이미지
- * @param $option 매개변수 옵션(다음 포함): $maxwidth width $maxheight height
- * array('width'=>xx,'height'=>xxx)
- * @internal
- * 이미지가 너무 길거나 너무 넓은 경우 생성되는 일반적인 이미지 압축 방법
- * 이를 해결하기 위해 먼저 자른 다음 비례적으로 압축하는 방법을 사용합니다
- */
- 공개 함수 Thumb_img($src_img, $save_img = '', $option)
- {
if (비어 있음( $option ['width'] ) 또는 비어 있음( $option ['height'] ))
- {
- 반환 배열( 'flag' => False, 'msg' => '원본 이미지의 길이와 너비는 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;
- }
- }
//해당 메소드 가져오기
- $org_funcs = $this ->get_img_funcs ( $org_ext ['msg'] );
//원본 크기 가져오기
- $source = $org_funcs ['create_func'] ( $src_img ); $dst_scale = $option [ 'height'] / $option ['width']; //대상 이미지 가로 세로 비율
- $src_scale = $src_h / $src_w; 비율
- if ($src_scale >= $ dst_scale)
- { // 너무 높음
- $w = intval ( $src_w );
- $h = intval ( $dst_scale * $w );< ;/p>
$ x = 0;
- $y = ($src_h - $h) / 3;
- } else
- { // 너무 넓음
- $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
- $scale = $option ['너비'] / $w;
- $target = imagecreatetruecolor ( $option ['너비'], $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 (! 비어 있음( $save_img ))
- {
$org_funcs ['save_func'] ( $target, $save_img );
- } else
- {
- 헤더( $org_funcs ['header'] );
- $org_funcs ['save_func']( $target );
- }
- imagedestroy( $target );
- 반환 배열('flag' = > True, 'msg' => '' );
- }
/**
- *
- * 확대된 이미지
- * @param $src_img 원본 이미지
- * @param $save_img 저장 위치
- * @param $option 매개변수 설정 array('width'= >xx ,'키'=>xxx)
- *
- */
- 함수 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;
- }
- }< ;/p>
//해당 메소드 꺼내기
- $org_funcs = $this->get_img_funcs ( $org_ext ['msg'] );
$source = $org_funcs ['create_func'] ( $src_img ); - $src_w = Imagesx ( $source );
- $src_h = Imagesy ( $source );< ;/p>
if (($ 옵션 ['너비'] && $src_w > $option ['너비']) || ($옵션 ['높이'] && $src_h > $ 옵션 ['높이']))
- {
- if ($option ['너비'] && $src_w > $option ['너비'])
- {
- $widthratio = $option [ '너비'] / $src_w;
- $resizewidth_tag = true ;
- }
if ($option ['height'] && $src_h > $option [' height'])
- {
- $heightratio = $ option ['height'] / $src_h;
- $resizeheight_tag = true;
- }
($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;
- $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 );
- imagecopyreized( $newim, $source, 0, 0, 0 , 0, $newwidth, $newheight, $src_w, $src_h );
- }
- }
- //输출(保存)图文
- if (!empty ( $save_img ))
- {
$org_funcs ['save_func'] ( $newim, $save_img );
- } else
- {
- 헤더( $org_funcs ['header'] );
- $org_funcs ['save_func'] ( $ newim );
- }
- imagedestroy ( $newim );
- 반환 배열 ('flag' => True, 'msg' => '' );
- }
/**
- *
- * 워터마크 이미지 생성
- * @param $org_img 원본 이미지
- * @param $mark_img 워터마크 이미지
- * @param $save_img 디렉토리가 존재하지 않으면 Create를 시도합니다. 디렉토리
- * @param array $option 워터마크에 대한 기본 설정은 다음과 같습니다.
- * x: 워터마크의 가로 위치, 기본값은 워터마크 이미지의 너비를 뺀 값입니다.
- * y: 워터마크의 세로 위치, 기본값은 워터마크의 높이를 뺀 값
- * alpha: 알파 값(투명도 조절), 기본값은 50
- */
- 공용 함수 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;
- }
- }
//获取상应画布
- $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 );
//拷贝水印图文坐标
- $mark_img_im_x = 0;
- $mark_img_im_y = 0;
- //拷贝水印图文高宽
- $mark_img_w = Imagesx ( $mark_img_im );
- $mark_img_ h = 이미지 ( $mark_img_im );
$org_img_w = 이미지x( $org_img_im );
- $org_img_h = 이미지x( $org_img_im );
//합성생성点坐标
- $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 또는 $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 또는 $org_img_im_y < 0) ? $y : $org_img_im_y;
//alpha
- $alpha = isset ( $option ['alpha'] ) ? $option ['alpha'] : 50;
- $alpha = ($alpha > 100 또는 $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
- {
- 헤더( $org_funcs ['header'] );
- $org_funcs ['save_func'] ( $ org_img_im );
- }
- //销毁画布
- imagedestroy ( $org_img_im );
- imagedestroy ( $mark_img_im );
- 반환 배열 ('flag' => True, 'msg' = > '' );
}
/**
- *
- * 이미지 확인
- * @paramknown_type $img_path
- * @return array('flag'=>true/false,'msg'=>ext/error message)
- */
- 비공개 함수 is_img($img_path)
- {
- if (!file_exists ( $img_path ))
- {
- return array ('flag' => False, 'msg' => "加载图文 $img_path 失败!" );
- }
- $ext = 폭발( '.', $img_path );
- $ext = strtolower( end( $ext ) );
- if (! in_array ( $ext, $this->exts ))
- {
- return array ('flag' => False, 'msg' => "图文 $img_path格式不正确!" );
- }
- 반환 배열 ('flag' => True, 'msg' => $ext );
- }
/**
- *
- * 올바른 이미지 함수를 반환합니다
- * @paramknown_type $ext
- */
- 비공개 함수 get_img_funcs($ext)
- {
- //选择
- 스위치($ext)
- {
- 케이스 '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 = '콘텐츠 -Type:image/bmp';
- $createfunc = 'imagecreatefrombmp';
- $savefunc = 'imagebmp';
- break;
- 기본값:
- $header = 'Content-Type:image /png';
- $createfunc = 'imagecreatefrompng';
- $savefunc = 'imagepng';
- }
- 반환 배열('save_func' => $savefunc, 'create_func' => $ createfunc, '헤더' => $header );
- }
/**
- *
- * 디렉터리를 확인하고 생성해 보세요.
- * @param $save_img
- */
- 비공개 함수 check_dir($save_img)
- {
- $dir = dirname ( $save_img );
- if (!is_dir ( $dir ))
- {
- if (! mkdir ( $dir, 0777, true ))
- {
- return array ('flag' => False, 'msg' => "图文保存目录 $dir 无法创建!" );
- }
- }
- 반환 배열 ('flag' => True, 'msg' => '' );
- }
- }
-
if (!empty ( $_FILES ['test'] ['tmp_name'] ))
- {
- //例子
- $img = new Img ();
- //원图
- $name = 폭발( '.', $_FILES ['test'] ['name'] );
- $org_img = 'D:/test.' . end ( $name );
- move_uploaded_file ( $_FILES ['test'] ['tmp_name'], $org_img );
- $option = array ('width' => $_POST ['width'], '높이' => $_POST ['높이'] );
- if ($_POST ['type'] == 1)
- {
- $s = $img->resize_image ( $org_img , '', $option );
- } else
- {
- $img->thumb_img( $org_img, '', $option );
- }
- 연결 해제( $org_img );
- }
-
复代码
使用方式:
PHP수납
-
- $img = 새 이미지();
- $org_img = 'D:/tt.png';
- $mark_img = 'D: /t.png';
- //保存waterimg为空时,将会直接输ude图文)
- $save_img = 'D:/test99h/testone/sss.png';
- //水印设置调节
- $option = array ('x' => 50, 'y' => 50, 'alpha' => 80 );
- //生成水印图文
- $ 플래그 = $img->water_mark ( $org_img, $mark_img, $save_img, $option );
复代码
当调节 $option 参数时,会유상应变화:
-
-
//例子
- $img = 새 Img();
- $org_img = 'D:/tt .png';
- //压缩图 Pictures(100*100)
- $option = array ('너비' => 100, '높이' => 100 );
- < ;p>//$save_img为空时,将会直接输出图image到浏览器
$save_img = 'D:/test99h/testone/sss_thumb.png';
- $flag = $img->thumb_img ( $org_img, $save_img, $option );
-
-
复主代码
调节$옵션의 큰 크기:
-
- $img = new Img ();
- //hara图
- $org_img = 'D:/tt.png';
- //水印标记图
- $mark_img = 'D:/t.png';
- //保存水印图文
- $save_img = 'D:/test99h/testone/sss.png';
- //水印设置调节
- $option = array ('x' => 50, 'y' => 50, 'alpha' => 60 );
- //生成印图文
- $flag = $img->water_mark ( $org_img, $mark_img, $save_img, $option );
- //压缩水印图文
- $option = 배열 ('너비' => 200, '높이' => 200 );
- //保存压缩图
- $save_img2 = 'D:/test99h/testone/sss2_thumb.png';
- $flag = $img->thumb_img ( $save_img, $ save_img2, $option ); //等比例压缩类似
-
复代码
지금图image,수印图상一致。
不然,会出现一些未知错误。
|