一个超级强大的图片加水印的类_PHP教程
下午没事干,就写了个图片加水印处理的类,本类实现了给图片加文字水印,加图片水印,并且实现了透明度的功能,以供各位网友学习和交流
/**
* 加水印类,支持文字、图片水印以及对透明度的设置、水印图片背景透明。
* @author litx date:2011-12-05下午3点于迈科龙快播研发中心
*/
class WaterMask
{
/**
* 水印类型
* @var int $waterType 0为文字水印 ;1为图片水印
*/
private $waterType = 1;
/**
* 水印位置 类型
* @var int $pos 默认为9(右下角)
*/
private $pos = 9;
/**
* 水印透明度
* @var int $transparent 水印透明度(值越小越透明)
*/
private $transparent = 20;
/**
* 如果是文字水印,则需要加的水印文字
* @var string $waterStr 默认值 (李铁雄个人作品集)
*/
private $waterStr = '个人作品集';
/**
* 文字字体大小
* @var int $fontSize 字体大小
*/
private $fontSize = 14;
/**
* 水印文字颜色(RGB)
* @var array $fontColor 水印文字颜色(RGB)
*/
private $fontColor = array ( 255, 255, 255 );
/**
* 字体文件
* @var unknown_type
*/
private $fontFile = 'AHGBold.ttf';
/**
* 水印图片
* @var string $waterImg
*/
private $waterImg = 'logo.png';
/**
* 需要添加水印的图片
* @var string $srcImg
*/
private $srcImg = '';
/**
* 图片句柄
* @var string $im
*/
private $im = '';
/**
* 水印图片句柄
* @var string $water_im
*/
private $water_im = '';
/**
* 图片信息
* @var array $srcImg_info
*/
private $srcImg_info = '';
/**
* 水印图片信息
* @var array $waterImg_info
*/
private $waterImg_info = '';
/**
* 水印文字宽度
* @var int $str_w
*/
private $str_w = '';
/**
* 水印文字高度
* @var int $str_h
*/
private $str_h = '';
/**
* 水印X坐标
* @var int $x
*/
private $x = '';
/**
* 水印y坐标
* @var int $y
*/
private $y = '';
/**
* 构造函数,通过传入需要加水印的源图片初始化源图片
* @param string $img 需要加水印的源图片
*/
public function __construct ($img)
{
if(file_exists($img)){//源文件存在
$this -> srcImg = $img ;
}else{//源文件不存在
echo '源文件'.$img.'不存在,请检查看文件路径是否正确';
exit();
}
}
/**
* 获取需要添加水印的图片的信息,并载入图片
*/
public function imginfo ()
{
$this -> srcImg_info = getimagesize($this -> srcImg);
var_dump($this -> srcImg_info);exit();
switch ($this -> srcImg_info[2]) {
case 3 ://png
$this -> im = imagecreatefrompng($this -> srcImg);
break 1;
case 2 : // jpeg/jpg
$this -> im = imagecreatefromjpeg($this -> srcImg);
break 1;
case 1 : //gif
$this -> im = imagecreatefromgif($this -> srcImg);
break 1;
default :
echo '源图片文件'. $this -> srcImg .'格式不正确,目前本函数只支持PNG、JPEG、GIF图片水印功能';
exit();
}
}
/**
* 获取水印图片的信息,并载入图片
*/
private function waterimginfo ()
{
$this -> waterImg_info = getimagesize($this -> waterImg);
switch ($this -> waterImg_info[2]) {
case 3 :
$this -> water_im = imagecreatefrompng($this -> waterImg);
break 1;
case 2 :
$this -> water_im = imagecreatefromjpeg($this -> waterImg);
break 1;
case 1 :
$this -> water_im = imagecreatefromgif($this -> waterImg);
break 1;
default :
echo '源图片文件'. $this -> srcImg .'格式不正确,目前本函数只支持PNG、JPEG、GIF图片水印功能';
exit();
}
}
/**
* 水印位置算法
*/
private function waterpos ()
{
switch ($this -> pos) {
case 0 : //随机位置
$this -> x = rand(0, $this -> srcImg_info[0] - $this -> waterImg_info[0]);
$this -> y = rand(0, $this -> srcImg_info[1] - $this -> waterImg_info[1]);
break 1;
case 1 : //上左
$this -> x = 20;
$this -> y = 20;
break 1;
case 2 : //上中
$this -> x = ($this -> srcImg_info[0] - $this -> waterImg_info[0]) / 2;
$this -> y = 20;
break 1;
case 3 : //上右
$this -> x = $this -> srcImg_info[0] - $this -> waterImg_info[0];
$this -> y = 20;
break 1;
case 4 : //中左
$this -> x = 20;
$this -> y = ($this -> srcImg_info[1] - $this -> waterImg_info[1]) / 2;
break 1;
case 5 : //中中
$this -> x = ($this -> srcImg_info[0] - $this -> waterImg_info[0]) / 2;
$this -> y = ($this -> srcImg_info[1] - $this -> waterImg_info[1]) / 2;
break 1;
case 6 : //中右
$this -> x = $this -> srcImg_info[0] - $this -> waterImg_info[0] - 20;
$this -> y = ($this -> srcImg_info[1] - $this -> waterImg_info[1]) / 2;
break 1;
case 7 : //下左
$this -> x = 20;
$this -> y = $this -> srcImg_info[1] - $this -> waterImg_info[1] - 20;
break 1;
case 8 : //下中 www.2cto.com
$this -> x = ($this -> srcImg_info[0] - $this -> waterImg_info[0]) / 2;
$this -> y = $this -> srcImg_info[1] - $this -> waterImg_info[1] - 20;
break 1;
case 9 : //下右
$this -> x = $this -> srcImg_info[0] - $this -> waterImg_info[0] - 20;
$this -> y = $this -> srcImg_info[1] - $this -> waterImg_info[1] - 20;
break 1;
default : //下右
$this -> x = $this -> srcImg_info[0] - $this -> waterImg_info[0] - 20;
$this -> y = $this -> srcImg_info[1] - $this -> waterImg_info[1] - 20;
break 1;
}
}
/**
* 加图片水印
*/
private function waterimg ()
{
if ($this -> srcImg_info[0] waterImg_info[0] || $this -> srcImg_info[1] waterImg_info[1]) {
echo '图片尺寸太小,无法加水印,请上传一张大图片';
exit();
}
//计算水印位置
$this->waterpos();
$cut = imagecreatetruecolor($this -> waterImg_info[0], $this -> waterImg_info[1]);
imagecopy($cut, $this -> im, 0, 0, $this -> x, $this -> y, $this -> waterImg_info[0],
$this -> waterImg_info[1]);
$pct = $this -> transparent;
imagecopy($cut, $this -> water_im, 0, 0, 0, 0, $this -> waterImg_info[0],
$this -> waterImg_info[1]);
//将图片与水印图片合成
imagecopymerge($this -> im, $cut, $this -> x, $this -> y, 0, 0, $this -> waterImg_info[0], $this -> waterImg_info[1], $pct);
}
/**
* 加文字水印
*/
private function waterstr ()
{
$rect = imagettfbbox($this -> fontSize, 0, $this -> fontFile, $this -> waterStr);
$w = abs($rect[2] - $rect[6]);
$h = abs($rect[3] - $rect[7]);
$fontHeight = $this -> fontSize;
$this -> water_im = imagecreatetruecolor($w, $h);
imagealphablending($this -> water_im, false);
imagesavealpha($this -> water_im, true);
$white_alpha = imagecolorallocatealpha($this -> water_im, 255, 255, 255, 127);
imagefill($this -> water_im, 0, 0, $white_alpha);
$color = imagecolorallocate($this -> water_im, $this -> fontColor[0], $this -> fontColor[1],
$this -> fontColor[2]);
imagettftext($this -> water_im, $this -> fontSize, 0, 0, $this -> fontSize, $color,
$this -> fontFile, $this -> waterStr);
$this -> waterImg_info = array (
0 => $w, 1 => $h
);
$this->waterimg();
}
/**
* 水印图片输出
*/
public function output ()
{
$this->imginfo();
if ($this -> waterType == 0) {
$this->waterstr();
} else {
$this->waterimginfo();
$this->waterimg();
}
switch ($this -> srcImg_info[2]) {
case 3 :
imagepng($this -> im, $this -> srcImg);
break 1;
case 2 :
imagejpeg($this -> im, $this -> srcImg);
break 1;
case 1 :
imagegif($this -> im, $this -> srcImg);
break 1;
default :
die('添加水印失败!');
break;
}
//图片合成后的后续销毁处理
imagedestroy($this -> im);
imagedestroy($this -> water_im);
}
}
使用方法示例:
//实例化对象
$obj = new WaterMask('img/10451.jpg');
//类型:0为文字水印、1为图片水印
$obj->waterType = 0;
//水印透明度,值 越小透明度越高
$obj->transparent = 15;
//水印文字
//$obj->waterStr = '生日快乐';
//水印图片
//$obj->waterImg = '';//水印图片
//文字字体大小
$obj->fontSize = 14;
//水印文字颜色(RGB)
$obj->fontColor = array(255,255,100);
//字体文件
$obj->fontFile = 'STCAIYUN.ttf';
//输出水印图片文件覆盖到输入的图片文件
$obj->output();
使用方式比较简单,也很实用。
作者 ltx851201

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

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

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

뜨거운 주제











소셜 미디어의 지속적인 발전으로 Xiaohongshu는 점점 더 많은 젊은이들이 자신의 삶을 공유하고 아름다운 것을 발견할 수 있는 플랫폼이 되었습니다. 많은 사용자들이 이미지 게시 시 자동 저장 문제로 고민하고 있습니다. 그렇다면 이 문제를 해결하는 방법은 무엇입니까? 1. Xiaohongshu에 게시할 때 사진이 자동으로 저장되는 문제를 해결하는 방법은 무엇입니까? 1. 캐시 지우기 먼저 Xiaohongshu의 캐시 데이터를 지워볼 수 있습니다. 단계는 다음과 같습니다. (1) Xiaohongshu를 열고 오른쪽 하단에 있는 "내" 버튼을 클릭합니다. (2) 개인 센터 페이지에서 "설정"을 찾아 클릭합니다. 캐시 지우기' 옵션을 선택하고 확인을 클릭하세요. 캐시를 삭제한 후 샤오홍슈에 다시 진입하여 사진을 올려 자동 저장 문제가 해결되었는지 확인해 보세요. 2. Xiaohongshu 버전을 업데이트하여 Xiaohongshu를 확인하세요.

MeituXiuXiu에 워터마크를 추가하는 방법을 알고 싶으십니까? Meitu Xiuxiu는 사진을 잘라내어 다른 사진에 배치, 사진 크기를 kb 단위로 변경, 워터마크 제거, 신분증 사진의 배경색 변경, 시간 추가 등의 기능을 제공하는 매우 사용하기 쉬운 사진 편집 소프트웨어입니다. , 날짜 및 위치 워터마크를 전체 화면에 표시하여 사용자가 사진 제작을 빠르게 완료할 수 있도록 도와줍니다. 일부 사용자는 자신의 사진을 만들어 다른 사람이 훔치는 것을 원하지 않지만 자신의 워터마크로 덮고 싶지만 어떻게 해야 할지 모르시나요? 이제 편집자가 아름다운 사진에 워터마크를 추가하는 방법을 알려드리겠습니다! 마음에 드신다면 오셔서 다운로드 받으세요! 1. Meitu Xiuxiu에 워터마크를 추가하는 방법은 무엇입니까? 아름다운 사진에 워터마크를 추가하는 방법을 공유해보세요! 1. 이 사이트에서 다운로드한 Meitu Xiu Xiu 2023 버전을 엽니다. Meitu Xiu Xiu 2023 버전 카테고리: 사진 및 미화 Meitu Xiu Xiu 2023 버전은 기능이 풍부한 사진 미화 및 편집 소프트웨어 다운로드

Douyin 짧은 동영상의 인기로 인해 댓글 영역의 사용자 상호 작용이 더욱 다채로워졌습니다. 일부 사용자는 자신의 의견이나 감정을 더 잘 표현하기 위해 댓글로 이미지를 공유하기를 원합니다. 그렇다면 TikTok 댓글에 사진을 게시하는 방법은 무엇입니까? 이 기사에서는 이 질문에 대해 자세히 답변하고 몇 가지 관련 팁과 예방 조치를 제공합니다. 1. Douyin 댓글에 사진을 어떻게 게시하나요? 1. Douyin 열기: 먼저 Douyin 앱을 열고 계정에 로그인해야 합니다. 2. 댓글 영역 찾기: 짧은 동영상을 탐색하거나 게시할 때 댓글을 달고 싶은 위치를 찾아 "댓글" 버튼을 클릭하세요. 3. 댓글 내용 입력: 댓글 영역에 댓글 내용을 입력합니다. 4. 사진 전송 선택: 댓글 내용 입력 인터페이스에 "사진" 버튼 또는 "+" 버튼이 표시됩니다.

찍은 사진을 더욱 개인화되고 독특하게 만들기 위해 Xiaomi Mi 14는 사진 워터마크 설정을 제공합니다. 사진 워터마크를 설정하면 사용자는 자신이 찍은 사진에 패턴, 텍스트, 로고를 추가할 수 있어 각 사진이 소중한 순간과 추억을 더 잘 기록할 수 있습니다. 다음으로 Xiaomi 14에서 사진 워터마크를 설정하여 사진을 더욱 개인화되고 생생하게 만드는 방법을 소개하겠습니다. Xiaomi Mi 14에서 사진 워터마크를 설정하는 방법은 무엇입니까? 1. 먼저 '카메라'를 클릭하세요. 2. 그런 다음 "설정"을 클릭합니다. 3. 그런 다음 워터마크를 찾으면 촬영을 시작할 수 있습니다.

1. 먼저 작업 표시줄의 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 [작업 관리자] 옵션을 선택하거나, 시작 로고를 마우스 오른쪽 버튼으로 클릭한 후 [작업 관리자] 옵션을 선택합니다. 2. 열린 작업 관리자 인터페이스에서 맨 오른쪽에 있는 [서비스] 탭을 클릭합니다. 3. 열린 [서비스] 탭에서 아래의 [서비스 열기] 옵션을 클릭하세요. 4. 열리는 [서비스] 창에서 [InternetConnectionSharing(ICS)] 서비스를 마우스 오른쪽 버튼으로 클릭한 후 [속성] 옵션을 선택하세요. 5. 열리는 속성 창에서 [연결 프로그램]을 [사용 안 함]으로 변경하고 [적용]을 클릭한 후 [확인]을 클릭하세요. 6. 시작 로고를 클릭한 후 종료 버튼을 클릭하고 [다시 시작]을 선택한 후 컴퓨터를 다시 시작합니다.

win1124H2 오른쪽 하단에 있는 평가판 텍스트를 제거하는 방법은 무엇입니까? 시스템을 사용할 때 바탕 화면의 오른쪽 하단에 투명한 워터마크가 표시되는 경우가 있습니다. 그러면 이 투명한 워터마크를 어떻게 제거합니까? 사용자는 타사 소프트웨어를 직접 사용하여 작동할 수 있습니다. 이 사이트에서는 win1124H2 평가판의 워터마크를 제거하는 방법을 사용자에게 주의 깊게 소개합니다. win1124H2 평가판의 워터마크를 제거하려면 UniversalWatermarkDisabler 도구를 다운로드하세요. 실행 후 현재 시스템 버전과 워터마크 상태가 표시됩니다. "상태"에 "설치 준비 완료"가 표시되면 제거할 수 있습니다.

파워포인트에서는 그림을 하나씩 표시하는 것이 일반적인 기술인데, 이는 애니메이션 효과를 설정하면 가능하다. 이 가이드에서는 기본 설정, 이미지 삽입, 애니메이션 추가, 애니메이션 순서 및 타이밍 조정 등 이 기술을 구현하는 단계를 자세히 설명합니다. 또한 트리거 사용, 애니메이션 속도 및 순서 조정, 애니메이션 효과 미리보기 등의 고급 설정 및 조정이 제공됩니다. 이러한 단계와 팁을 따르면 사용자는 PowerPoint에서 그림이 차례로 표시되도록 쉽게 설정할 수 있으므로 프레젠테이션의 시각적 효과가 향상되고 청중의 관심을 끌 수 있습니다.

1. WPS를 사용하여 문서를 엽니다. 문서에 워터마크가 있습니다. 어떻게 제거하나요? 아래를보세요. 2. 메뉴 표시줄에서 삽입 탭을 찾아 이 탭 아래에 있는 머리글 및 바닥글 아이콘을 선택한 후 마우스 왼쪽 버튼으로 클릭하세요. 3. 이때 페이지의 텍스트는 회색이 되어 편집이 불가능하지만, 텍스트 뒷면의 워터마크는 이때 편집이 가능합니다. 4. 워터마크를 클릭하면 사진 주위에 여러 개의 작은 사각형이 있고 이때 사진을 편집할 수 있으므로 이것이 사진 워터마크임을 알 수 있습니다. 5. 키보드의 삭제 키를 이용해 사진을 삭제하면 워터마크가 사라진 것을 확인할 수 있습니다. 6. 페이지 위에서 마우스를 더블클릭하면 머리글 및 바닥글 편집 모드가 종료됩니다. 페이지의 텍스트는 원래 색상으로 돌아가서 편집할 수 있지만, 이때 페이지의 워터마크는 사라졌습니다. 7.
