Home Backend Development PHP Tutorial PHP给图片增多水印得类

PHP给图片增多水印得类

Jun 13, 2016 am 10:39 AM
image text this

PHP给图片增加水印得类

<?php/*+--------------------------------------| 生成加水印的图片类 (支持水印为图片或者文字)| ============================| by JackMing (感谢Dash和其他不知道姓名的朋友支持,本类在这些朋友作品的基础上创建)+--------------------------------------*/Class Gimage{var $src_image_name = ""; //输入图片的文件名(必须包含路径名)var $jpeg_quality = 90; //jpeg图片质量var $save_image_file = ''; //输出文件名var $wm_image_name = ""; //水印图片的文件名(必须包含路径名)var $wm_image_pos = 1; //水印图片放置的位置// 0 = middle// 1 = top left// 2 = top right// 3 = bottom right// 4 = bottom left// 5 = top middle// 6 = middle right// 7 = bottom middle// 8 = middle left//other = 3var $wm_image_transition = 20; //水印图片与原图片的融合度 (1=100)var $wm_text = ""; //水印文字(支持中英文以及带有\r\n的跨行文字)var $wm_text_size = 20; //水印文字大小var $wm_text_angle = 4; //水印文字角度,这个值尽量不要更改var $wm_text_pos = 3; //水印文字放置位置var $wm_text_font = ""; //水印文字的字体var $wm_text_color = "#cccccc"; //水印字体的颜色值function create($filename=""){if ($filename) $this->src_image_name = strtolower(trim($filename));$src_image_type = $this->get_type($this->src_image_name);$src_image = $this->createImage($src_image_type,$this->src_image_name);if (!$src_image) return;$src_image_w=ImageSX($src_image);$src_image_h=ImageSY($src_image);if ($this->wm_image_name){$this->wm_image_name = strtolower(trim($this->wm_image_name));$wm_image_type = $this->get_type($this->wm_image_name);$wm_image = $this->createImage($wm_image_type,$this->wm_image_name);$wm_image_w=ImageSX($wm_image);$wm_image_h=ImageSY($wm_image);$temp_wm_image = $this->getPos($src_image_w,$src_image_h,$this->wm_image_pos,$wm_image);$wm_image_x = $temp_wm_image["dest_x"];$wm_image_y = $temp_wm_image["dest_y"];imageCopyMerge($src_image, $wm_image,$wm_image_x,$wm_image_y,0,0,$wm_image_w,$wm_image_h,$this->wm_image_transition);}if ($this->wm_text){$this->wm_text = $this->gb2utf8($this->wm_text);$temp_wm_text = $this->getPos($src_image_w,$src_image_h,$this->wm_text_pos);$wm_text_x = $temp_wm_text["dest_x"];$wm_text_y = $temp_wm_text["dest_y"];if(preg_match("/([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])/i", $this->wm_text_color, $color)){$red = hexdec($color[1]);$green = hexdec($color[2]);$blue = hexdec($color[3]);$wm_text_color = imagecolorallocate($src_image, $red,$green,$blue);}else{$wm_text_color = imagecolorallocate($src_image, 255,255,255);}imagettftext($src_image, $this->wm_text_size, $this->wm_angle, $wm_text_x, $wm_text_y, $wm_text_color,$this->wm_text_font,$this->wm_text);}if ($this->save_file){switch ($this->output_type){case 'gif':$src_img=ImagePNG($src_image, $this->save_file); break;case 'jpeg':$src_img=ImageJPEG($src_image, $this->save_file, $this->jpeg_quality); break;case 'png':$src_img=ImagePNG($src_image, $this->save_file); break;default:$src_img=ImageJPEG($src_image, $this->save_file, $this->jpeg_quality); break;}}else{if ($src_image_type = "jpg") $src_image_type="jpeg";header("Content-type: image/{$src_image_type}");switch ($src_image_type){case 'gif':$src_img=ImagePNG($src_image); break;case 'jpg':$src_img=ImageJPEG($src_image, "", $this->jpeg_quality);break;case 'png':$src_img=ImagePNG($src_image);break;default:$src_img=ImageJPEG($src_image, "", $this->jpeg_quality);break;}}imagedestroy($src_image);}/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/*createImage 根据文件名和类型创建图片内部函数$type: 图片的类型,包括gif,jpg,png$img_name:图片文件名,包括路径名,例如 " ./mouse.jpg"*/function createImage($type,$img_name){if (!$type){$type = $this->get_type($img_name);}switch ($type){case 'gif':if (function_exists('imagecreatefromgif'))[email&#160;protected]($img_name);break;case 'jpg':$tmp_img=ImageCreateFromJPEG($img_name);break;case 'png':$tmp_img=ImageCreateFromPNG($img_name);break;default:$tmp_img=ImageCreateFromString($img_name);break;}return $tmp_img;}/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++getPos 根据源图像的长、宽,位置代码,水印图片id来生成把水印放置到源图像中的位置内部函数$sourcefile_width: 源图像的宽$sourcefile_height: 原图像的高$pos: 位置代码// 0 = middle// 1 = top left// 2 = top right// 3 = bottom right// 4 = bottom left// 5 = top middle// 6 = middle right// 7 = bottom middle// 8 = middle left$wm_image: 水印图片ID*/function getPos($sourcefile_width,$sourcefile_height,$pos,$wm_image=""){if($wm_image){$insertfile_width = ImageSx($wm_image);$insertfile_height = ImageSy($wm_image);}else {$lineCount = explode("\r\n",$this->wm_text);$fontSize = imagettfbbox($this->wm_text_size,$this->wm_text_angle,$this->wm_text_font,$this->wm_text);$insertfile_width = $fontSize[2] - $fontSize[0];$insertfile_height = count($lineCount)*($fontSize[1] - $fontSize[3]);}switch ($pos){case 0:$dest_x = ( $sourcefile_width / 2 ) - ( $insertfile_width / 2 );$dest_y = ( $sourcefile_height / 2 ) - ( $insertfile_height / 2 );break;case 1:$dest_x = 0;if ($this->wm_text){$dest_y = $insertfile_height;}else{$dest_y = 0;}break;case 2:$dest_x = $sourcefile_width - $insertfile_width;if ($this->wm_text){$dest_y = $insertfile_height;}else{$dest_y = 0;}break;case 3:$dest_x = $sourcefile_width - $insertfile_width;$dest_y = $sourcefile_height - $insertfile_height;break;case 4:$dest_x = 0;$dest_y = $sourcefile_height - $insertfile_height;break;case 5:$dest_x = ( ( $sourcefile_width - $insertfile_width ) / 2 );if ($this->wm_text){$dest_y = $insertfile_height;}else{$dest_y = 0;}break;case 6:$dest_x = $sourcefile_width - $insertfile_width;$dest_y = ( $sourcefile_height / 2 ) - ( $insertfile_height / 2 );break;case 7:$dest_x = ( ( $sourcefile_width - $insertfile_width ) / 2 );$dest_y = $sourcefile_height - $insertfile_height;break;case 8:$dest_x = 0;$dest_y = ( $sourcefile_height / 2 ) - ( $insertfile_height / 2 );break;default:$dest_x = $sourcefile_width - $insertfile_width;$dest_y = $sourcefile_height - $insertfile_height;break;}return array("dest_x"=>$dest_x,"dest_y"=>$dest_y);}/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++gb2utf8 指定的文字转换为UTF-8格式,包括中英文混合内部函数*/function gb2utf8($gb){if(!trim($gb))return $gb;$filename="./gb2312.txt";$tmp=file($filename);$codetable=array();while(list($key,$value)=each($tmp))$codetable[hexdec(substr($value,0,6))]=substr($value,7,6);$utf8="";while($gb){if (ord(substr($gb,0,1))>127){$tthis=substr($gb,0,2);$gb=substr($gb,2,strlen($gb)-2);$utf8.=$this->u2utf8(hexdec($codetable[hexdec(bin2hex($tthis))-0x8080]));}else{$tthis=substr($gb,0,1);$gb=substr($gb,1,strlen($gb)-1);$utf8.=$this->u2utf8($tthis);}}return $utf8;}function u2utf8($c){$str="";if ($c < 0x80){$str.=$c;}else if ($c < 0x800){$str.=chr(0xC0 | $c>>6);$str.=chr(0x80 | $c & 0x3F);}else if ($c < 0x10000){$str.=chr(0xE0 | $c>>12);$str.=chr(0x80 | $c>>6 & 0x3F);$str.=chr(0x80 | $c & 0x3F);}else if ($c < 0x200000){$str.=chr(0xF0 | $c>>18);$str.=chr(0x80 | $c>>12 & 0x3F);$str.=chr(0x80 | $c>>6 & 0x3F);$str.=chr(0x80 | $c & 0x3F);}return $str;}/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++get_type 获得图片的格式,包括jpg,png,gif内部函数$img_name: 图片文件名,可以包括路径名*/function get_type($img_name)//获取图像文件类型{$name_array = explode(".",$img_name);if (preg_match("/\.(jpg|jpeg|gif|png)$/", $img_name, $matches)){$type = strtolower($matches[1]);}else{$type = "string";}return $type;}}?>
Copy after login


使用方法:
$img = new Gimage();
$img->wm_text = "www.discuz.com";
$img->wm_text_font = "./STXINWEI.TTF";
$img->create("./mouse.jpg");

就可以了,其中
mouse.jpg是你要在其上添加水印的图片名称,注意包含路径名
STXINWEI.TTF是字体文件的路径名+文件名
这就是一个简单的测试。如果要调整更复杂的显示效果,只要修改一下类中的属性就可以了,例如把字体放大就可以
$img->wm_text_size = 20;
增加水印图片就可以
$img->wm_image_name="文件名";

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to use Bing Image Creator for free How to use Bing Image Creator for free Feb 27, 2024 am 11:04 AM

This article will introduce seven ways to get high-quality output using the free BingImageCreator. BingImageCreator (now known as ImageCreator for Microsoft Designer) is one of the great online artificial intelligence art generators. It generates highly realistic visual effects based on user prompts. The more specific, clear, and creative your prompts are, the better the results will be. BingImageCreator has made significant progress in creating high-quality images. It now uses Dall-E3 training mode, showing a higher level of detail and realism. However, its ability to consistently produce HD results depends on several factors, including fast

How to delete images from Xiaomi phones How to delete images from Xiaomi phones Mar 02, 2024 pm 05:34 PM

How to delete images on Xiaomi mobile phones? You can delete images on Xiaomi mobile phones, but most users don’t know how to delete images. Next is the tutorial on how to delete images on Xiaomi mobile phones brought by the editor. Interested users can come and join us. Let's see! How to delete images on Xiaomi mobile phone 1. First open the [Album] function in Xiaomi mobile phone; 2. Then check the unnecessary pictures and click the [Delete] button in the lower right corner; 3. Then click [Album] at the top to enter the special area , select [Recycle Bin]; 4. Then directly click [Empty Recycle Bin] as shown in the figure below; 5. Finally, directly click [Permanent Delete] to complete.

Imagemagic installation Centos and Image installation tutorial Imagemagic installation Centos and Image installation tutorial Feb 12, 2024 pm 05:27 PM

LINUX is an open source operating system. Its flexibility and customizability make it the first choice of many developers and system administrators. In the LINUX system, image processing is a very important task, and Imagemagick and Image are Two very popular image processing tools, this article will introduce you to how to install Imagemagick and Image in Centos system, and provide detailed installation tutorials. Imagemagic installation Centos tutorial Imagemagick is a powerful image processing toolset, which can perform various image operations under the command line. The following are the steps to install Imagemagick on Centos system: 1

Let's talk about why Vue2 can access properties in various options through this Let's talk about why Vue2 can access properties in various options through this Dec 08, 2022 pm 08:22 PM

This article will help you interpret the vue source code and introduce why you can use this to access properties in various options in Vue2. I hope it will be helpful to everyone!

An article that understands this point and catches up with 70% of front-end people An article that understands this point and catches up with 70% of front-end people Sep 06, 2022 pm 05:03 PM

A colleague got stuck due to a bug pointed by this. Vue2’s this pointing problem caused an arrow function to be used, resulting in the inability to get the corresponding props. He didn't know it when I introduced it to him, and then I deliberately looked at the front-end communication group. So far, at least 70% of front-end programmers still don't understand it. Today I will share with you this link. If everything is wrong If you haven’t learned it yet, please give me a big mouth.

Clever way to use this keyword in jQuery Clever way to use this keyword in jQuery Feb 25, 2024 pm 04:09 PM

Flexible use of this keyword in jQuery In jQuery, the this keyword is a very important and flexible concept. It is used to refer to the DOM element currently being manipulated. By rationally using this keyword, we can easily operate elements on the page and achieve various interactive effects and functions. This article will combine specific code examples to introduce the flexible use of this keyword in jQuery. Simple this example First, let's look at a simple this example. Suppose we have a

What is this? An in-depth analysis of this in JavaScript What is this? An in-depth analysis of this in JavaScript Aug 04, 2022 pm 05:02 PM

What is this? The following article will introduce you to this in JavaScript, and talk about the differences between this in different calling methods of functions. I hope it will be helpful to you!

imagefilledrectangle() function in PHP imagefilledrectangle() function in PHP Aug 30, 2023 am 09:05 AM

The imagefilledrectangle() function draws a filled rectangle. Syntax imagefilledrectangle($img,$x1,$y1,$x2,$y2,$color) Parameters image Use imagecreatetruecolor() to create a blank image. x1The x coordinate of point 1. y1 The y coordinate of point 1. x2 x coordinate of point 2. y2 The y coordinate of point 2. color fill color. Return value imagefilledrectangle() function returns successfully

See all articles