php铺满,重复铺满水印 - Jun. - OSCHINA - 中文开源技术交流社区
/*
$tmp="tmp/a.jpg";
$obj = new WaterMask($tmp);
$obj->waterImg = 'sy_logo.png';
$obj->transparent = 50;
$obj->output();
*/
class WaterMask{
public $pos = 0; //水印位置
public $transparent = 45; //水印透明度
public $waterImg = ''; //水印圖片
private $srcImg = ''; //需要添加水印的圖片
private $im = ''; //圖片句柄
private $water_im = ''; //水印圖片句柄
private $srcImg_info = ''; //圖片信息
private $waterImg_info = ''; //水印圖片信息
function __construct($img) { //析構函數
$this->srcImg = file_exists($img) ? $img : die('"'.$img.'" 源文件不存在!');
}
private function imginfo() { //獲取需要添加水印的圖片的信息,并載入圖片。
$this->srcImg_info = getimagesize($this->srcImg);
switch ($this->srcImg_info[2]) {
case 3:
$this->im = imagecreatefrompng($this->srcImg);
break 1;
case 2:
$this->im = imagecreatefromjpeg($this->srcImg);
break 1;
case 1:
$this->im = imagecreatefromgif($this->srcImg);
break 1;
default:
die('原圖片('.$this->srcImg.')格式不對,只支持PNG、JPEG、GIF。');
}
}
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:
die('水印圖片('.$this->srcImg.')格式不對,只支持PNG、JPEG、GIF。');
}
}
private function waterimg() {
if ($this->srcImg_info[0] <= $this->waterImg_info[0] || $this->srcImg_info[1] <= $this->waterImg_info[1]){
die('水印比原圖大!');
}
$cut = imagecreatetruecolor($this->waterImg_info[0],$this->waterImg_info[1]);
$total=($this->srcImg_info[0]/$this->waterImg_info[0])*($this->srcImg_info[1]/$this->waterImg_info[1]);//重復次數
$x=10;$y=10;
for($i=0;$i<=$total;$i++){
if($y>$this->srcImg_info[1]){
$y=10;
$x+=$this->waterImg_info[0]+150;
}
imagecopy($cut,$this->im,0,0,$x,$y,$this->waterImg_info[0],$this->waterImg_info[1]);
imagecopy($cut,$this->water_im,0,0,0,0,$this->waterImg_info[0],$this->waterImg_info[1]);
imagecopymerge($this->im,$cut,$x,$y,0,0,$this->waterImg_info[0],$this->waterImg_info[1],$this->transparent);
$y+=150;
}
}
function output() {
$this->imginfo();
$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);
}
}
?>
總結
以上是生活随笔為你收集整理的php铺满,重复铺满水印 - Jun. - OSCHINA - 中文开源技术交流社区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转码java,java转码
- 下一篇: java爬虫post 404_POST