/** * 图片缩放水印类 * * @version 1.0 ; * */ 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中央) 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 */ public function 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(empty($val)) { return false; } else { if(in_array($arg,$params)) { $this->$arg = $val; } } } return true; } /** * 图片缩放 * * @param $src_file 源文件路径 * @param $dst_file 目标文件路径 * @return 缩略图片路径/false */ public function scale($src_file,$dst_file="") { $dst_width = $this->width; $dst_height = $this->height; $mode = $this->smallpic_mode; $magic_water_handle = NewMagickWand(); if (!MagickReadImage($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; //尺寸 $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); //缩放 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);//缩放 } //缩放填充模式 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(empty($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 */ public function water_mark($src_file,$dst_file="") { $this->magick_handle = NewMagickWand(); if (!MagickReadImage($this->magick_handle, $src_file)) return false; $this->set_mark(); if(empty($dst_file)) { //建立临时文件 $dst_file = tempnam($_SERVER["SINASRV_CACHE_DIR"],"TMP_IMG"); } MagickWriteImage($this->magick_handle, $dst_file); return $dst_file; } /** * 对内接口 * 给图片打水印 * */ protected function 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));//缩放水印到图片的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,$top); } } } }
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사
R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
어 ass 신 크리드 그림자 : 조개 수수께끼 솔루션
1 몇 주 전ByDDD
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
Atomfall에서 크레인 제어 키 카드를 찾을 수 있습니다
1 몇 주 전ByDDD

뜨거운 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

드림위버 CS6
시각적 웹 개발 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구
