⑴ php给图片加水印的思想是什么
贴个php的图片处理类 你可以自己研究下 共同进步 呵呵
/*
此类包含以下功能
A.生成缩略图
B.给图片添加文字水印(包括中文)
C.将指定的图片旋转90度/180度/270度,并保存至文件
D.将图片水平/垂直翻转,并保存至文件
E.在线裁剪图片任意部分矩形(正在编写之中)
具体目标效果暂时可以参考 http://yananzb.com/cut/cut.htm
期待您的响应
成员函数说明
---------------------------------------------------------------------------------------------
public void CImage::__construct(string $src_image_file)
功能:类CImage的构造函数
参数
$src_image_file 字符串,源图片文件名 注意,目前只支持gif,png,jpeg,jpg格式,这是GD库的限制,并非本程序的局限
---------------------------------------------------------------------------------------------
public bool CImage: thumb($image_dist,$x)
功能:根据源图片生成缩略图,并保存至文件
$image_dist 字符串 目标缩略图片路径及文件名 如 /File/th.jpg
$x 整型 目标缩略图片的尺寸限制即当原始图片的宽大于高时,那么新的缩略图的宽为$x,反之高为$x
---------------------------------------------------------------------------------------------
public bool image_press($image_dist,$str,$font="simkai.ttf")
函数功能:
图片生成水印并保存新图片至目标文件
参数说明:
$image_dist 字符串 目标图片名
$str 字符串 要写入到图片水印的字符串
$font 字符串 合法的系统字体名或WEB目录中正确的字体文件名
---------------------------------------------------------------------------------------------
public bool rotate($image_dist,$angle)
函数功能:
将源图片旋转一定角度并将新图片保存至文件
参数说明:
$image_dist 字符串 目标图片文件名
$angle 整数 要旋转的角度 只能是90或180或270度
---------------------------------------------------------------------------------------------
public bool rotate_h($image_dist)
函数功能:
将源图片水平翻转,并将新图片保存至文件
参数说明:
$image_dist 字符串 目标图片文件名
---------------------------------------------------------------------------------------------
public bool rotate_v($image_dist)
函数功能:
将源图片垂直翻转,并将新图片保存至文件
参数说明:
$image_dist 字符串 目标图片文件名
---------------------------------------------------------------------------------------------
使用范例:
$p=new CImage("s.jpg"); //创建一个图片处理对象
$p->thumb("thumb.jpg",300); //生成缩略图 限制尺寸为300,保存为thumb.jpg
$p->rotate("rt.jpg",90); //旋转90度,并保存为rt.jpg,类似地,你可以将90换成180,270进行旋转
$p->rotate_h("h.jpg"); //水平翻转
$p->rotate_v("v.jpg"); //垂直翻转
*/
class CImage{
var $src_image;
var $width;
var $height;
var $image_type;
var $img;
var $src_x;
var $src_y;
function __construct($image_file)
{
$info=GetImageSize($image_file);
$this->src_image=$image_file;
$this->width=$info[0];
$this->height=$info[1];
switch($info[2])
{
case 1:
$this->image_type="gif";
break;
case 2:
$this->image_type="jpeg";
break;
case 3:
$this->image_type="png";
break;
default:
return false;
//echo("Unsurport Image type.");
break;
} //swith end
//echo "ok";
$new_function='ImageCreateFrom'.ucfirst($this->image_type);
$this->img=$new_function($this->src_image);
$this->src_x=ImageSX($this->img);
$this->src_y=ImageSY($this->img);
}
function thumb($image_dist,$x) //$x为新图的限制边的尺寸
{
$src_x=ImageSX($this->img);
$src_y=ImageSY($this->img);
$scale=min($x/$src_x,$x/$src_y);
if($scale<1)
{
$new_x=floor($scale*$src_x);
$new_y=floor($scale*$src_y);
$img_tmp=ImageCreateTrueColor($new_x,$new_y); //set the size of Canvas for the new Image
ImageCopyResampled($img_tmp,$this->img,0,0,0,0,$new_x,$new_y,$src_x,$src_y); //Resampled
ImageDestroy($this->img);
$new_function="Image".ucfirst($this->image_type);
return $new_function($img_tmp,$image_dist);
}
} // thumb end
//给图片生成文字水印
function image_press($image_dist,$str,$font="simkai.ttf") {
$str=iconv("GB2312","utf-8",$str);
$blue=ImageColorAllocate($this->img,90,255,255);
$white=ImageColorAllocate($this->img,255,0,0);
ImageTTFText($this->img,20,0,$this->src_x/2/2,$this->src_y-80,$white,$font,$str);
$new_function="Image".ucfirst($this->image_type);
return $new_function($this->img,$image_dist);
}
function rotate($image_dist,$angle)
{
$img_tmp=null;
$new_function="Image".ucfirst($this->image_type);
if(($angle!=90)&&($angle!=180)&&($angle!=270))
{
echo("Un-valid angle on calling CImage::rotate(\$image_dist,\$angle) .<p>The valid angle must be 90 or 180 or 270.");
return false;
}
if(($angle==90)||($angle==270))
{
$img_tmp=ImageCreateTrueColor($this->src_y,$this->src_x);
}
else
{
$img_tmp=ImageCreateTrueColor($this->src_x,$this->src_y);
}
switch($angle)
{
case 90:
for($i=0;$i<$this->src_x;$i++)
{
for($j=0;$j<$this->src_y;$j++)
{
ImageSetPixel($img_tmp,$this->src_y-$j-1,$i,ImageColorAt($this->img,$i,$j));
}
}
return $new_function($img_tmp,$image_dist);
break;
case 180:
for($i=0;$i<$this->src_x;$i++)
{
for($j=0;$j<$this->src_y;$j++)
{
ImageSetPixel($img_tmp,$this->src_x-$i-1,$this->src_y-$j-1,ImageColorAt($this->img,$i,$j));
}
}
return $new_function($img_tmp,$image_dist);
break;
case 270:
for($i=0;$i<$this->src_x;$i++)
{
for($j=0;$j<$this->src_y;$j++)
{
ImageSetPixel($img_tmp,$j,$this->src_x-$i-1,ImageColorAt($this->img,$i,$j));
}
}
return $new_function($img_tmp,$image_dist);
break;
} //end switch
} //end rotate
function rotate_h($image_dist)
{
$new_function="Image".ucfirst($this->image_type);
$img_tmp=ImageCreateTrueColor($this->src_x,$this->src_y);
ImageCopyResampled($img_tmp,$this->img,0,0,$this->src_x-1,0,$this->src_x,$this->src_y,-$this->src_x,$this->src_y); //水平翻转
return $new_function($img_tmp,$image_dist);
}
function rotate_v($image_dist)
{
$new_function="Image".ucfirst($this->image_type);
$img_tmp=ImageCreateTrueColor($this->src_x,$this->src_y);
ImageCopyResampled($img_tmp,$this->img,0,0,0,$this->src_y-1,$this->src_x,$this->src_y,$this->src_x,-$this->src_y);
return $new_function($img_tmp,$image_dist);
}
} //end CImage
⑵ 用PHP代码给图片加水印
这篇文章主要介绍了用PHP代码给图片加水印的相关资料,需要的朋友可以参考下
先找好一张图片,更名为face.jpeg,创建watermark.php:
?
1
2
3
4
5
6
7
8
9
10
11
12
<?php
/**
*
Created
by
PhpStorm.
*
User:
Administrator
*
Date:
2015/6/29
*
Time:
22:27
*/
$img
=
imagecreatefromjpeg('face.jpeg');//根据已有的JPG创建image
header('Content-type:image/jpeg');//设置mime
type
imagestring($img,5,5,5,'Vito-L',imagecolorallocate($img,255,0,0));//生成水印,imagestring(图片,字体,位置x,位置y,字符串,颜色)
imagejpeg($img);//输出图片
//整幅图像的左上角为
0,0
效果如下:
以上所述就是本文的全部内容了,希望大家能够喜欢。
⑶ php 水印能否随图片大小变化
当然可以了,水印,一般都是打的字,或是另一张图片,在你打水印的时候,给出一个比例
原图与水印的比例,随着原图比例大小而改变水印图的大小(或文字的大小)
⑷ PHP给图片添加文字水印
请确认C:\WINDOWS\Fonts\simkai.ttf';是否支持中文
或不要转换
$str = iconv('GB2312','UTF-8',$str);
直接
$str=$str;
⑸ php 如何检查图片是否已经加过水印 求解
在php采集的时候,尤其是大量的自动采集的时候,加了水印的图片想程序自动鉴别。
你是这种想法吗?
这种想法可以,但没有这种方法。以前没有,今后也不会有。
水印和图片已经形成一张新图片了,不要说PHP对图片没有识别能力,就算PHP对图片有识别能力,它也没有办法识别图片上哪个属于图片内容,哪个属于水印内容。
但是,我们就没有办法处理水印的问题吗?办法肯定是有的。我提供几种思路:
1、我们自己建立一个无水印网站地址库,这个由我们日常来管理。php通过图片的真实地址,属于无水印网站地址范围,就认为是无水印的。不在范围内的,就作为有水印处理。
2、如果我们固定从某个大站取图片,它的图片有的有水印,有的无水印,而且有水印的都是那么固定的格式,那我们就根据它的方法,在水印上添加我们的水印。但这不是万能的,如果它在图片上全部铺满它的logo或者网址,像贴满膏药一样无法下手,我们只能对此说sorry,换个网站吧。
⑹ php文字水印,水印会根据图片的大小自动变化
这个好像有点复杂哦
一般水印都是用GD库函数实现的,你可以把上传的图片长宽取出来,这应该不难吧,然后根据需要在你实现水印的函数里根长宽参数关联,应该就能实现。
⑺ 请问php怎么去除采集到的图片水印,怎么去除水印呢,求解
PHP去除水印需要用插件在线处理,这种方法是不可取的。
推荐方法:使用PS等图片处理工具进行处理。
⑻ 怎么给php 网站视频添加水印
通过php调用ffmpeg命令加水印!
⑼ imagefttext生成水印怎么保存 php的
使用imagepng()/imagejpeg()/imagegif()函数;
使用这几个函数时添加第二个参数(你想保存的图片完整路径),它就会根据这个路径生成图片文件并且保存到该路径下。比如:
$im=imagecreatefrompng("1.png"); //取出原图
$hb=imagecolorallocate($im,0,0,0);
imagettftext($im,50,0,40,150,$hb,"STXINGKA.TTF","兄弟连lamp156"); //加水印
imagepng($im,"images/water1.png"); //保存水印图到本文件夹下images文件夹,水印图命名为water1.png
imagedestroy($im);
//由于是保存图片而非显示图片,所以header("content-type:image/png");是不需要的
⑽ php如何实现水印平铺
代码如下:
imagick代码:
<?php
$image = new imagick('logo.jpg');
$im = new imagick();
$im->newimage( 140, 80, new imagickpixel( "none" ) );
$draw = new imagickdraw();
$draw->setfillcolor(new imagickpixel( "grey" ));
$draw->setgravity(imagick::gravity_northwest);
$draw->annotation(10,10 ,'right');
$draw->setgravity(imagick::gravity_southeast);
$draw->annotation(5,15 ,'right');
$im->drawimage( $draw);
$image = $image->textureimage($im);
$image->compositeimage($image,imagick::composite_,0,0);
header( "content-type: image/{$image->getimageformat()}" );
$image->writeimage('wmark_text_tiled.jpg');
$image->clear();
$image->destroy();
?>