PHP中如何给图片添加水印?

2026-04-06 16:371阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1474个文字,预计阅读时间需要6分钟。

PHP中如何给图片添加水印?

在之前的文章中,我们为家长们带来了《PHP中如何完成图像的缩放和裁剪?(实例详解)》一文。其中,通过实例向大家介绍了在PHP中应该如何进行图像的缩放和裁剪。接下来,本文将继续探讨PHP中的图像处理。

在PHP中,图像的缩放和裁剪可以通过GD库来实现。以下是一个简单的示例,展示如何使用GD库对图像进行缩放和裁剪:

php

// 获取图像宽高$width=imagesx($image);$height=imagesy($image);

// 设置缩放后的宽高$newWidth=200;$newHeight=150;

// 创建新图像$newImage=imagecreatetruecolor($newWidth, $newHeight);

// 缩放图像imagecopyresampled($newImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

// 裁剪图像$cropWidth=100;$cropHeight=100;$x=($newWidth - $cropWidth) / 2;$y=($newHeight - $cropHeight) / 2;

imagecopyresampled($newImage, $image, 0, 0, $x, $y, $cropWidth, $cropHeight, $cropWidth, $cropHeight);

// 输出图像header('Content-Type: image/jpeg');imagejpeg($newImage);

// 释放内存imagedestroy($image);imagedestroy($newImage);?>

在这段代码中,我们首先使用`imagecreatefromjpeg()`函数加载一个JPEG图像。然后,我们获取原始图像的宽度和高度,并设置缩放后的宽度和高度。接下来,我们创建一个新图像,并使用`imagecopyresampled()`函数进行缩放。为了裁剪图像,我们计算裁剪区域的位置,并再次使用`imagecopyresampled()`函数进行裁剪。最后,我们输出处理后的图像,并释放内存。

以上就是PHP中图像缩放和裁剪的基本方法。希望对您有所帮助。

在之前的文章中给大家带来了《PHP中怎样完成图像的缩放和裁剪?(实例详解)》,其中通过实例给大家介绍了在PHP中应该怎样去进行图形的缩放和裁剪,本篇文章继续来看一看PHP中图形处理的知识,我们应该怎样给图片增加水印。希望对大家有帮助!

在我们的日常生活中,为了不希望自己的图片被盗用,经常能够看到在一些图片上添加水印,比如我们网站上,输入图片文件的话会自动在右下角加上一个水印,那么这种水印效果是怎么实现的呢?通过PHP就可以实现为图片增加水印的效果。

在之前文章中对图片进行裁剪放到目标图上的操作和添加水印有些类似,为了实现添加水印,需要通过 imagecopymerge函数。

imagecopymerge函数

imagecopymerge函数的语法格式如下:

imagecopymerge($目标图片,$来源图片,$目标开始的x ,$目标开始的y,$来源的x ,$来源的y ,$来源的宽 ,$来源的高 ,$透明度)

其中透明度的值是0-100的整数,透明度的值越大,水印越不透明。

接下来我们通过实例来看一下应该怎样给图片增加水印:

首先准备了一个名为test.png的图片和一个名为logo.png的水印图片放到了我们的根目录里

注意上面这个是示例图片,下面的水印并不是我添加的,是网站自动添加的,为了区分,实例的水印是下面这样的

PHP中如何给图片添加水印?

那接下来,操作如下:

<?php //打开目标图片 $dst = imagecreatefrompng('test.png'); //打开Logo来源图片 $src = imagecreatefrompng('logo.png'); //得到目标图片的宽高 $dst_info = getimagesize('test.png'); //得到logo图片的宽高 $src_info = getimagesize('logo.png'); //放到最右下脚可得出图片水印图片需要开始的位置即: //x点位置:需要大图的宽 - 小图的宽; //y点位置:放大图的高 - 小图的高 $dst_x = $dst_info[0] - $src_info[0]; $dst_y = $dst_info[1] - $src_info[1]; //要将图片加在右下脚 imagecopymerge($dst, $src, $dst_x, $dst_y, 0, 0, $src_info[0], $src_info[1], 50); header('Content-type:image/png'); imagepng($dst); imagedestroy($dst); imagedestroy($src); ?>

输出结果:

由上述结果可以看出,通过imagecopymerge函数添加了一个透明度为50的水印。

拓展知识imagecopy函数

不止使用imagecopymerge函数一种方法添加水印,也能够通过 imagecopy() 函数,它能够复制函数的一部分,它的语法格式如下:

imagecopy($目标图片, $来源图片,$目标图片x,$目标图片y,$来源图片x,$来源图片y,$来源图片宽,$来源图片高)

它的含义是,在来源图片的(x,y)的地方选取宽为w,高为h的矩形区域到目标图片的(x,y)上。

使用 PHP 中的 imagesx()、imagesy() 两个函数来分别获取图片的宽度和高度。它们的语法格式如下:

imagesx(resource $image) imagesy(resource $image)

实例如下:

<?php function watermark($img, $watermark, $district = 0,$watermarkquality = 95){ $imginfo = @getimagesize($img); $watermarkinfo = @getimagesize($watermark); $img_w = $imginfo[0]; $img_h = $imginfo[1]; $watermark_w = $watermarkinfo[0]; $watermark_h = $watermarkinfo[1]; if($district == 0) $district = rand(1,9); if(!is_int($district) OR 1 > $district OR $district > 9) $district = 9; switch($district){ case 1: $x = +5; $y = +5; break; case 2: $x = ($img_w - $watermark_w) / 2; $y = +5; break; case 3: $x = $img_w - $watermark_w - 5; $y = +5; break; case 4: $x = +5; $y = ($img_h - $watermark_h) / 2; break; case 5: $x = ($img_w - $watermark_w) / 2; $y = ($img_h - $watermark_h) / 2; break; case 6: $x = $img_w - $watermark_w; $y = ($img_h - $watermark_h) / 2; break; case 7: $x = +5; $y = $img_h - $watermark_h - 5; break; case 8: $x = ($img_w - $watermark_w) / 2; $y = $img_h - $watermark_h - 5; break; case 9: $x = $img_w - $watermark_w - 5; $y = $img_h - $watermark_h - 5; break; } switch ($imginfo[2]) { case 1: $im = @imagecreatefromgif($img); break; case 2: $im = @imagecreatefromjpeg($img); break; case 3: $im = @imagecreatefrompng($img); break; } switch ($watermarkinfo[2]) { case 1: $watermark_logo = @imagecreatefromgif($watermark); break; case 2: $watermark_logo = @imagecreatefromjpeg($watermark); break; case 3: $watermark_logo = @imagecreatefrompng($watermark); break; } if(!$im or !$watermark_logo) return false; $dim = @imagecreatetruecolor($img_w, $img_h); if(@imagecopy($dim, $im, 0, 0, 0, 0,$img_w,$img_h )){ imagecopy($dim, $watermark_logo, $x, $y, 0, 0, $watermark_w, $watermark_h); } $file = dirname($img) . '/w' . basename($img); $result = imagejpeg ($dim,$file,$watermarkquality); imagedestroy($watermark_logo); imagedestroy($dim); imagedestroy($im); if($result){ echo $img.' 水印添加成功'; return; } else { return false; } } $file = 'test.png'; //待加水印的图片地址 $water = 'logo.png'; //水印图片的地址 watermark($file, $water); ?>

输出结果:

效果如下:

推荐学习:《PHP视频教程》

以上就是一定搞得懂PHP中如何添加图片水印的详细内容,更多请关注自由互联其它相关文章!

本文共计1474个文字,预计阅读时间需要6分钟。

PHP中如何给图片添加水印?

在之前的文章中,我们为家长们带来了《PHP中如何完成图像的缩放和裁剪?(实例详解)》一文。其中,通过实例向大家介绍了在PHP中应该如何进行图像的缩放和裁剪。接下来,本文将继续探讨PHP中的图像处理。

在PHP中,图像的缩放和裁剪可以通过GD库来实现。以下是一个简单的示例,展示如何使用GD库对图像进行缩放和裁剪:

php

// 获取图像宽高$width=imagesx($image);$height=imagesy($image);

// 设置缩放后的宽高$newWidth=200;$newHeight=150;

// 创建新图像$newImage=imagecreatetruecolor($newWidth, $newHeight);

// 缩放图像imagecopyresampled($newImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

// 裁剪图像$cropWidth=100;$cropHeight=100;$x=($newWidth - $cropWidth) / 2;$y=($newHeight - $cropHeight) / 2;

imagecopyresampled($newImage, $image, 0, 0, $x, $y, $cropWidth, $cropHeight, $cropWidth, $cropHeight);

// 输出图像header('Content-Type: image/jpeg');imagejpeg($newImage);

// 释放内存imagedestroy($image);imagedestroy($newImage);?>

在这段代码中,我们首先使用`imagecreatefromjpeg()`函数加载一个JPEG图像。然后,我们获取原始图像的宽度和高度,并设置缩放后的宽度和高度。接下来,我们创建一个新图像,并使用`imagecopyresampled()`函数进行缩放。为了裁剪图像,我们计算裁剪区域的位置,并再次使用`imagecopyresampled()`函数进行裁剪。最后,我们输出处理后的图像,并释放内存。

以上就是PHP中图像缩放和裁剪的基本方法。希望对您有所帮助。

在之前的文章中给大家带来了《PHP中怎样完成图像的缩放和裁剪?(实例详解)》,其中通过实例给大家介绍了在PHP中应该怎样去进行图形的缩放和裁剪,本篇文章继续来看一看PHP中图形处理的知识,我们应该怎样给图片增加水印。希望对大家有帮助!

在我们的日常生活中,为了不希望自己的图片被盗用,经常能够看到在一些图片上添加水印,比如我们网站上,输入图片文件的话会自动在右下角加上一个水印,那么这种水印效果是怎么实现的呢?通过PHP就可以实现为图片增加水印的效果。

在之前文章中对图片进行裁剪放到目标图上的操作和添加水印有些类似,为了实现添加水印,需要通过 imagecopymerge函数。

imagecopymerge函数

imagecopymerge函数的语法格式如下:

imagecopymerge($目标图片,$来源图片,$目标开始的x ,$目标开始的y,$来源的x ,$来源的y ,$来源的宽 ,$来源的高 ,$透明度)

其中透明度的值是0-100的整数,透明度的值越大,水印越不透明。

接下来我们通过实例来看一下应该怎样给图片增加水印:

首先准备了一个名为test.png的图片和一个名为logo.png的水印图片放到了我们的根目录里

注意上面这个是示例图片,下面的水印并不是我添加的,是网站自动添加的,为了区分,实例的水印是下面这样的

PHP中如何给图片添加水印?

那接下来,操作如下:

<?php //打开目标图片 $dst = imagecreatefrompng('test.png'); //打开Logo来源图片 $src = imagecreatefrompng('logo.png'); //得到目标图片的宽高 $dst_info = getimagesize('test.png'); //得到logo图片的宽高 $src_info = getimagesize('logo.png'); //放到最右下脚可得出图片水印图片需要开始的位置即: //x点位置:需要大图的宽 - 小图的宽; //y点位置:放大图的高 - 小图的高 $dst_x = $dst_info[0] - $src_info[0]; $dst_y = $dst_info[1] - $src_info[1]; //要将图片加在右下脚 imagecopymerge($dst, $src, $dst_x, $dst_y, 0, 0, $src_info[0], $src_info[1], 50); header('Content-type:image/png'); imagepng($dst); imagedestroy($dst); imagedestroy($src); ?>

输出结果:

由上述结果可以看出,通过imagecopymerge函数添加了一个透明度为50的水印。

拓展知识imagecopy函数

不止使用imagecopymerge函数一种方法添加水印,也能够通过 imagecopy() 函数,它能够复制函数的一部分,它的语法格式如下:

imagecopy($目标图片, $来源图片,$目标图片x,$目标图片y,$来源图片x,$来源图片y,$来源图片宽,$来源图片高)

它的含义是,在来源图片的(x,y)的地方选取宽为w,高为h的矩形区域到目标图片的(x,y)上。

使用 PHP 中的 imagesx()、imagesy() 两个函数来分别获取图片的宽度和高度。它们的语法格式如下:

imagesx(resource $image) imagesy(resource $image)

实例如下:

<?php function watermark($img, $watermark, $district = 0,$watermarkquality = 95){ $imginfo = @getimagesize($img); $watermarkinfo = @getimagesize($watermark); $img_w = $imginfo[0]; $img_h = $imginfo[1]; $watermark_w = $watermarkinfo[0]; $watermark_h = $watermarkinfo[1]; if($district == 0) $district = rand(1,9); if(!is_int($district) OR 1 > $district OR $district > 9) $district = 9; switch($district){ case 1: $x = +5; $y = +5; break; case 2: $x = ($img_w - $watermark_w) / 2; $y = +5; break; case 3: $x = $img_w - $watermark_w - 5; $y = +5; break; case 4: $x = +5; $y = ($img_h - $watermark_h) / 2; break; case 5: $x = ($img_w - $watermark_w) / 2; $y = ($img_h - $watermark_h) / 2; break; case 6: $x = $img_w - $watermark_w; $y = ($img_h - $watermark_h) / 2; break; case 7: $x = +5; $y = $img_h - $watermark_h - 5; break; case 8: $x = ($img_w - $watermark_w) / 2; $y = $img_h - $watermark_h - 5; break; case 9: $x = $img_w - $watermark_w - 5; $y = $img_h - $watermark_h - 5; break; } switch ($imginfo[2]) { case 1: $im = @imagecreatefromgif($img); break; case 2: $im = @imagecreatefromjpeg($img); break; case 3: $im = @imagecreatefrompng($img); break; } switch ($watermarkinfo[2]) { case 1: $watermark_logo = @imagecreatefromgif($watermark); break; case 2: $watermark_logo = @imagecreatefromjpeg($watermark); break; case 3: $watermark_logo = @imagecreatefrompng($watermark); break; } if(!$im or !$watermark_logo) return false; $dim = @imagecreatetruecolor($img_w, $img_h); if(@imagecopy($dim, $im, 0, 0, 0, 0,$img_w,$img_h )){ imagecopy($dim, $watermark_logo, $x, $y, 0, 0, $watermark_w, $watermark_h); } $file = dirname($img) . '/w' . basename($img); $result = imagejpeg ($dim,$file,$watermarkquality); imagedestroy($watermark_logo); imagedestroy($dim); imagedestroy($im); if($result){ echo $img.' 水印添加成功'; return; } else { return false; } } $file = 'test.png'; //待加水印的图片地址 $water = 'logo.png'; //水印图片的地址 watermark($file, $water); ?>

输出结果:

效果如下:

推荐学习:《PHP视频教程》

以上就是一定搞得懂PHP中如何添加图片水印的详细内容,更多请关注自由互联其它相关文章!