>백엔드 개발 >PHP 튜토리얼 >이미지 워터마크 추가, 압축 및 자르기를 위한 PHP 캡슐화 클래스

이미지 워터마크 추가, 압축 및 자르기를 위한 PHP 캡슐화 클래스

PHPz
PHPz원래의
2016-05-16 20:08:241265검색

사진에 워터마크를 추가하는 것은 실제로 원본 사진과 워터마크를 함께 추가하는 것입니다. 아래에서는 제가 최근에 정리한 정보를 알려드리겠습니다.

PHP는 주로 GD 라이브러리 확장을 사용하여 이미지 파일을 작동합니다. 이미지를 조작하기 위해 PHP를 자주 사용하면 자연스럽게 많은 기능을 캡슐화하게 되고, 그렇지 않으면 너무 많은 반복 코드를 작성하게 됩니다. 그림과 관련된 함수가 많을 경우 이러한 함수를 정리하는 것을 고려할 수 있으므로 이를 클래스로 캡슐화하는 아이디어를 가지고 있습니다.

사진 작업에는 네 가지 주요 단계가 있습니다.

1단계: 사진 열기

2단계: 사진 조작

3단계: 사진 출력

4단계: 사진 파기

1, 3, 4단계는 매번 작성해야 하며, 매번 거의 동일합니다. 실제로 변경해야 할 유일한 단계는 이미지 조작 단계입니다. 그림 조작은 종종 하나 이상의 주요 GD 기능을 통해 수행됩니다.

이 글의 패키지 클래스에 있는 4가지 메소드는 텍스트 워터마크(imagettftext()), 이미지 워터마크(imagecopymerge()), 이미지 압축, 이미지 자르기(imagecopyresampled())이며 나머지는 일반적으로 사용되는 GD 기능에 대해서는 자세히 설명하지 않습니다.

코드 직접 입력:

info=getimagesize($src);
  $this->type=image_type_to_extension($this->info['2'],false);
  $fun="imagecreatefrom{$this->type}";
  $this->image=$fun($src);
 }
 /**
  * 文字水印
  * @param [type] $font  字体
  * @param [type] $content 内容
  * @param [type] $size  文字大小
  * @param [type] $col  文字颜色(四元数组)
  * @param array $location 位置 
  * @param integer $angle 倾斜角度
  * @return [type]   
  */
 public function fontMark($font,$content,$size,$col,$location,$angle=0){
  $col=imagecolorallocatealpha($this->image, $col['0'], $col['1'], $col['2'],$col['3']);
  imagettftext($this->image, $size, $angle, $location['0'], $location['1'], $col,$font,$content);
 }
 /**
  * 图片水印
  * @param [type] $imageMark 水印图片地址
  * @param [type] $dst  水印图片在原图片中的位置
  * @param [type] $pct  透明度
  * @return [type]   
  */
 public function imageMark($imageMark,$dst,$pct){
  $info2=getimagesize($imageMark);
  $type=image_type_to_extension($info2['2'],false);
  $func2="imagecreatefrom".$type;
  $water=$func2($imageMark);
  imagecopymerge($this->image, $water, $dst[0], $dst[1], 0, 0, $info2['0'], $info2['1'], $pct);
  imagedestroy($water);
 }
 /**
  * 压缩图片
  * @param [type] $thumbSize 压缩图片大小
  * @return [type]   [description]
  */
 public function thumb($thumbSize){
  $imageThumb=imagecreatetruecolor($thumbSize[0], $thumbSize[1]);
  imagecopyresampled($imageThumb, $this->image, 0, 0, 0, 0, $thumbSize[0], $thumbSize[1], $this->info['0'], $this->info['1']);
  imagedestroy($this->image);
  $this->image=$imageThumb;
 }
 /**
 * 裁剪图片
  * @param [type] $cutSize 裁剪大小
  * @param [type] $location 裁剪位置
  * @return [type]   [description]
  */
  public function cut($cutSize,$location){
   $imageCut=imagecreatetruecolor($cutSize[0],$cutSize[1]);
   imagecopyresampled($imageCut, $this->image, 0, 0, $location[0], $location[1],$cutSize[0],$cutSize[1],$cutSize[0],$cutSize[1]);
   imagedestroy($this->image);
   $this->image=$imageCut;
  }
 /**
  * 展现图片
  * @return [type] [description]
  */
 public function show(){
  header("content-type:".$this->info['mime']);
  $funn="image".$this->type;
  $funn($this->image);
 }
 /**
  * 保存图片
 * @param [type] $newname 新图片名
 * @return [type]   [description]
 */
  public function save($newname){
   header("content-type:".$this->info['mime']);
   $funn="image".$this->type;
   $funn($this->image,$newname.'.'.$this->type);
  }
  public function __destruct(){
   imagedestroy($this->image);
  }
 }
 ?>

주요 논리는 imagecopymerge() 방법 함께 워터마크 효과를 만듭니다. 이 메소드의 메소드 프로토타입과 매개변수를 살펴보겠습니다.

bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int$src_x , int $src_y , int $src_w , int $src_h , int $pct )
src_x, src_y, 너비 src_w, 높이 src_h에서 시작하는 좌표를 사용하여 src_im 이미지의 일부를 복사합니다. dst_im 이미지에 중심 좌표는 dst_x와 dst_y입니다. 두 이미지는 0~100 범위의 pct를 기준으로 병합됩니다. pct = 0이면 실제로는 아무 작업도 수행하지 않습니다. 100이면 이 함수는 팔레트 이미지의 imagecopy()와 정확히 동일하며 트루 컬러 이미지에 대한 알파 투명도를 구현합니다.


위 내용은 PHP를 사용하여 이미지에 워터마크를 추가하고 압축하고 잘라내는 캡슐화 클래스를 소개하는 이 기사의 전체 내용입니다.

더 많은 관련 튜토리얼을 보려면

초보부터 마스터까지 PHP 프로그래밍에 대한 전체 비디오 튜토리얼 세트
를 방문하세요.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.