<?php
require "imageClass.php";
$src = '250px-Wtybill.jpeg';
$image = new Image($src);
$font_url = "msyh.ttc";
$content = "wtybill";
$color = array(
0=>255,
1=>225,
2=>225,
);
$transparency = 30;
$size = 20;
$rotate = 10;
$move = array(
'x'=>20,
'y'=>30
);
$image->fontMark($font_url,$content,$color,$transparency,$Size,$rotate,$move);
$image->show();
$image->save(success);
?>
<title>封装-压缩图片</title>
<?php
class Image{
private $info;
public $image;
public function __construct($str){
$info = getimagesize($str);
$this->info = array(
'width'=>$info[0],
'height'=>$info[1],
'type'=>image_type_to_extension($info[2],false),
'mime'=>$info['mime'],
);
$fun = "imagecreatefrom{$this->info['type']}";
$this->image = $fun($str);
}
public function thumb($width,$height){
$image_thumb = imagecreatetruecolor(300,200);
imagecopyresampled($image_thumb,$this->image,0,0,0,0,$width,$height,$this->info['width'],$this->info['height']);
imagedestroy($this->image);
$this->image =$image_thumb;
}
public function fontMark($font_url,$content,$color,$transparency,$Size,$rotate,$move){
$col = imagecolorallocatealpha($this->image,$color[0],$color[1],$color[2],$transparency);
imagettftext($this->image,$size,$rotate,$move['x'],$move['y'],$col,$font_url,$content);
}
public function show(){
ob_clean();
header("content-type:".$this->info['mime']);
$funs = "image{$this->info['type']}";
$funs($this->image);
}
public function save($newname){
$funs = "image{$this->info['type']}";
$funs($this->image,$newname.".".$this->info['type']);
}
public function __destruct(){
imagedestroy($this->image);
}
}
?>
strlen是取一个字符串长度,由于数组下标是从0开始的,-1之后表示最后一个字符的位置如果是隐藏可以使用ele.hide(),其中ele为元素对象。$.each()是jquery中的高效循环输出方法,除此外,还可以使用for语句foreach都可以的。
$content,$font_url,$size,$color,$move,$rotate 正常
$font_url,$content,$color,$Size,$rotate,$move 出错
卡了一天终于解决了,应该是形参顺序出问题了:
把public function fontMark($font_url,$content,$color,$transparency,$Size,$rotate,$move)
改成public function fontMark($content,$font_url,$size,$color,$move,$rotate)(顺便把自己,$transparency改成了color,相应的改了test文件相关的)
test文件的fontMark的形参同理。
很神奇:视频里不知道老师从哪里复制过来的参数,那一段视频刚好卡了一下,少了一段。
把public function fontMark($font_url,$content,$color,$transparency,$Size,$rotate,$move)
改成public function fontMark($content,$font_url,$size,$color,$move,$rotate)(顺便把自己,$transparency改成了color,相应的改了test文件相关的)
test文件的fontMark的形参同理。
在这儿卡一天了原因我现在还不知道,可能是形参顺序问题,也可能是我打错字了。
很神奇:如果我把错误的那段形参复制拿去测试,就算顺序对了还是无法显示水印。
但是自己手写或者从别的地方复制过来的形参,就算顺序和以前无法显示水印的形参顺序一样也可以显示水印。
视频里不知道老师从哪里复制过来的参数,那一段视频刚好卡了一下,少了一段。
test文件的$src在封装(imageClass)文件里写成了$str,不过好像没有影响,为什么呢?
字体文件这一行老师为什么要把$font改成$font_url,就算不改也没有影响啊。然后我的字体文件确实叫msyh.ttc,而且前面未封装的文字水印可以Accepted