- /**
- * 이미지 스케일링 워터마크 클래스
- *
- */
- class cls_photo
- {
- protected $waterrate = 0.2; //이미지에 대한 워터마크 아이콘의 비율
- protected $width = 300; //썸네일의 기본 너비
- protected $height = 200; //썸네일의 기본 높이
- protected $padding = 5 //워터마크에서 가장자리까지의 거리
- protected $ water_mark = "./water.png";
- protected $water_mark_pos = 5;//워터마크 이미지 위치 (1=왼쪽 위, 2=오른쪽 위, 3=왼쪽 아래, 4=오른쪽 아래, 5 center)
- protected $watermode = 0; // 워터마크가 없는 썸네일 0개 워터마크가 있는 썸네일 1개
- protected $magick_handle; // 그림 작업 핸들
- protected $format = array ( 'jpg', 'gif', 'png','jpeg' ); // 사진 파일 형식 제한
- protected $smallpic_mode = 2; //기본 모드 0은 썸네일을 생성하지 않고, 1은 자르기 및 크기 조절, 2는 비례 크기 조절, 3은 크기 조절 및 채우기 모드
-
- /**
- * 이미지 매개변수 설정
- *
- * @param $arg 이미지 매개변수는 다음과 같이 배열에 여러 번 입력할 수 있습니다.
- * @param $protected 매개변수 값
- * array(
- * 'waterrate'=>0.2,
- * 'water_mark'=>'./water.png',
- * 'water_mark_pos'=>4,
- * 'smallpic_mode'=>1
- * );
- * @return ture/false
- */
- 공개 함수 set_args( $arg,$val="" )
- {
- $params = array( 'waterrate','water_mark ', 'water_mark_pos','smallpic_mode','watermode','width','height' );
- if ( is_array ( $arg ) )
- {
- foreach ( $arg as $k => ;$ v )
- {
- if ( in_array ( $k,$params ) )
- {
- $this->$k = $v;
- }
- }
- }
- else
- {
- if ( 비어 있음 ( $val ) )
- {
- return false;
- }
- else
- {
- if ( in_array ( $arg ,$params ) )
- {
- $this->$arg = $val;
- }
- }
- }
- return true;
- }
-
- /**
- * 이미지 크기 조정
- *
- * @param $src_file 소스 파일 경로
- * @param $dst_file 대상 파일 경로
- * @return 썸네일 이미지 경로/false
- */
- 공용 함수 크기( $src_file,$dst_file="" )
- {
- $dst_width = $this->width;
- $dst_height = $this ->height;
- $mode = $this->smallpic_mode;
- $magic_water_handle = NewMagickWand();
- if ( !MagicReadImage ( $magic_water_handle, $src_file ) ) return false;
-
- //유형
- $srcext = strtolower ( MagickGetImageFormat ( $magic_water_handle ) );
- if ( $srcext=='bmp' )
- {
- $srcext = 'jpeg';
- }
- if ( !in_array ( $srcext,$this->format ) ) return false;
- //Size
- $src_width = MagickGetImageWidth ( $magic_water_handle );
- $src_height = MagickGetImageHeight ( $ Magic_water_handle );
-
- //확대/축소 모드
- if ( $mode == 1 )
- {
- $pos_x=$pos_y = 0 //임시 위치 자르기
- $src_widthc = $src_width;//임시 너비 자르기
- $src_heightc = $src_height;//임시 높이 자르기
- if ( $src_width/$src_height>$dst_width/$dst_height )
- {
- $ src_widthc = $src_height*$dst_width/$dst_height;
- $pos_x = ( $src_width-$src_widthc ) /2;
-
- }
- else
- {
- $src_heightc = $src_width *$dst_height/$dst_width;
- $pos_y = ( $src_height-$src_heightc ) /2;
- }
- MagickCropImage ( $magic_water_handle,$src_widthc,$src_heightc,$pos_x,$pos_y ); 자르기
- //MagickCropImage 함수 이후 Gif 이미지는 변경되지만 캔버스는 변경되지 않기 때문입니다
- $this->magick_handle = NewMagickWand();
- MagickNewImage ( $this->magick_handle,$src_widthc ,$src_heightc,'#ffffff' );
- MagickSetFormat( $this->magick_handle,$srcext );
- MagickCompositeImage( $this->magick_handle,$magic_water_handle,MW_OverCompositeOp,0,0 );
- //Scale
- MagickScaleImage ( $this->magick_handle, $dst_width, $dst_height );
-
- }
- //비례 스케일링 모드
- if ( $mode == 2 )
- {
- if ( $src_width/$src_height>$dst_width/$dst_height )
- {
- $dst_height=$dst_width*$src_height/$src_width;
- }
- else
- {
- $dst_width=$dst_height*$src_width/$src_height;
- }
- $this->magick_handle=$magic_water_handle;//
- MagickScaleImage 교체( $this->magick_handle, $dst_width , $dst_height );//Scale
- }
- //채우기 모드 확장
- if ( $mode == 3 )
- {
- if ( $src_width/$src_height>$dst_width/$ dst_height )
- {
- $dst_heightc=$dst_width*$src_height/$src_width;
- $dst_widthc=$dst_width;
- }
- else
- {
- $dst_widthc=$dst_height *$src_width/$src_height;
- $dst_heightc=$dst_height;
- }
- MagickScaleImage( $magic_water_handle, $dst_widthc, $dst_heightc );//缩放
- $this->magick_handle = NewMagickWand();
- MagickNewImage( $this->magick_handle,$dst_width,$dst_height, $this->smallpic_bgcolor );
- MagickSetFormat ( $this->magick_handle,$srcext );
- MagickCompositeImage ( $this->magick_handle,$magic_water_handle,MW_OverCompositeOp, ( $dst_width-$dst_widthc ) /2 , ( $dst_height-$dst_heightc ) /2 );
- }
- //打水印
- if ( $this->watermode == 1 )
- {
- $this-> set_mark();
- }
- if ( 비어 있음 ( $dst_file ) )
- {
- //建立临时文件
- $dst_file = tempnam ( $_SERVER["SINASRV_CACHE_DIR"],"TMP_IMG" );
- }
- MagickWriteImage ( $this->magick_handle, $dst_file );
- return $dst_file;
- }
-
- /**
- * 워터마크
- *
- * @param $src_file 워터마크를 생성할 이미지의 경로
- * @param $dst_file 워터마크 생성을 위한 파일 저장 경로가 비어 있는 경우 임의의 임시 파일. 제작됩니다
- * @return 워터마크 파일 경로/false
- */
- 공용 함수 water_mark ( $src_file,$dst_file="" )
- {
- $this->magick_handle = NewMagickWand();
- if ( !MagickReadImage ( $this->magick_handle, $src_file ) )
- return false;
- $this->set_mark();
- if ( 비어 있음 ( $dst_file ) )
- {
- //建立临时文件
- $dst_file = tempnam ( $ _SERVER["SINASRV_CACHE_DIR"],"TMP_IMG" );
- }
- MagickWriteImage( $this->magick_handle, $dst_file );
- return $dst_file;
- }
-
- / **
- * 내부 인터페이스
- * 워터마크 사진
- *
- */
- 보호 함수 set_mark()
- {
-
- //尺寸
- $dst_width = MagickGetImageWidth ( $this->magick_handle );
- $dst_height = MagickGetImageHeight ( $this->magick_handle );
- //处理水印图
- if ( $this->water_mark && is_file ( $this->water_mark ) )
- {
- $magic_water_handle = NewMagickWand();
- MagickRemoveImage ( $magic_water_handle );
- if ( MagickReadImage ( $magic_water_handle, $this->water_mark ) )
- {
- MagickScaleImage ( $magic_water_handle, $dst_width*$this-> ;waterrate, $dst_width*$this->waterrate*MagickGetImageHeight ( $magic_water_handle ) /MagickGetImageWidth ( $magic_water_handle ) );//缩放水印到图 Pictures 1/5
- if ( $this->water_mark_pos == 1 )
- {
- $left = $this->padding;
- $top = $this->padding;
- }
- elseif ( $this->water_mark_pos == 2 )
- {
- $left = $dst_width-$this->padding-MagickGetImageWidth( $magic_water_handle );
- $top = $this->padding;
- }
- elseif( $this ->water_mark_pos == 3 )
- {
- $left = $this->padding;
- $top = $dst_height -$this->padding-MagickGetImageHeight ( $magic_water_handle );
- }
- elseif ( $this->water_mark_pos == 4 )
- {
- $left = $dst_width-$this->padding-MagickGetImageWidth ( $magic_water_handle );
- $top =$dst_height -$this->padding-MagickGetImageHeight ( $magic_water_handle );
- }
- elseif ( $this->water_mark_pos == 5 )
- {
- $left = ( $dst_width-MagickGetImageWidth ( $ Magic_water_handle ) ) /2;
- $top = ( $dst_height -MagickGetImageHeight ( $magic_water_handle ) ) /2;
- }
- MagickCompositeImage ( $this->magick_handle,$magic_water_handle,MW_OverCompositeOp,$left,$ 상단 );
- }
- }
- }
- }
复代码
|