欢迎访问宙启技术站
智能推送

PHP函数实现图片压缩和水印的方法

发布时间:2023-05-31 16:19:07

PHP作为一种常用的服务器端脚本语言,拥有很多丰富的函数库,其中就包括实现图片压缩和水印的函数。在实际开发中,图片的处理一直是一个非常重要的问题,因为图片的质量直接影响到网站的用户体验,所以优化图片质量往往是开发的一个重要目标。下面我们将介绍PHP中如何实现图片压缩和水印。

一、图片压缩

图片压缩是指通过对图片进行降低分辨率、降低图片质量等操作,减小图片的体积,从而达到减小网络传输所需时间和降低服务器存储的目的。在PHP中,实现图片压缩有多种方式,下面我们将介绍常用的两种方式。

方法一:使用GD库

GD库是PHP中常用的图像处理库,通过GD库提供的函数,我们可以很方便地对图片进行压缩和其他操作。下面我们将介绍如何使用GD库实现图片压缩:

1、打开图片

要对一个图片进行压缩,首先要将图片读取到内存中,我们可以使用GD库提供的imagecreatefromjpeg()函数、imagecreatefrompng()函数、imagecreatefromgif()函数、imagecreatefromwbmp()函数等来打开不同格式的图片。例如:

$srcImg = imagecreatefromjpeg('img.jpg');

2、创建新的画布

接下来,我们要创建一个新的画布,用于存放压缩后的图片。我们可以使用GD库提供的imagecreatetruecolor()函数来创建一个真彩色画布。例如:

$newImg = imagecreatetruecolor(200, 150);

其中,200和150分别代表新画布的宽度和高度,可以根据需要进行调整。

3、复制原始图像

将原始图像复制到新画布中,并指定宽度和高度。我们可以使用GD库提供的imagecopyresampled()函数来实现。例如:

$imageResampled = imagecopyresampled($newImg, $srcImg, 0, 0, 0, 0, 200, 150, imagesx($srcImg), imagesy($srcImg));

其中, 个参数是新的画布,第二个参数是原始图片,第三和第四个参数是新画布的左上角坐标,第五和第六个参数是原始图片的左上角坐标,第七和第八个参数是新画布的宽度和高度,第九和第十个参数是原始图片的宽度和高度。

4、保存图片

将压缩后的图片保存到本地文件系统中。我们可以使用GD库提供的imagejpeg()函数、imagepng()函数、imagegif()函数来保存不同格式的图片。例如:

imagejpeg($newImg, 'newImg.jpg');

当然,这只是一个基本的图片压缩例子,有时我们可能需要根据不同的需求对图片进行更高级的操作。比如在压缩图片的同时,对图片进行旋转、裁剪、缩放等操作。该如何做呢?这时,我们可以使用GD库提供的其他函数,例如:imagerotate()、imagecrop()、imagescale()等。

方法二:使用ImageMagick库

除了GD库外,还有一个常用的图像处理库是ImageMagick,在处理大型图片时,ImageMagick相对于GD性能更高,同时它支持更多的图片格式和更多的操作方式。下面我们将介绍如何使用ImageMagick实现图片压缩:

1、安装Imagick扩展

首先,要使用ImageMagick,需要在PHP中安装所需的扩展Imagick。我们可以通过命令行或者php.ini文件来安装,如下:

命令行:pecl install imagick

php.ini:extension = imagick.so

安装完成后,可以通过phpinfo()函数来检查Imagick扩展是否安装成功。

2、打开图片

同样地,要将一个图片读取到内存中,我们可以使用ImageMagick提供的Imagick类的读取函数。例如:

$srcImg = new Imagick('img.jpg');

3、设置压缩参数

接下来,我们需要设置图片的压缩参数,例如压缩质量、分辨率等等。可以通过Imagick类的相关函数来设置参数。例如:

$srcImg->setImageCompressionQuality(80);

这个函数用于设置图片的质量,值越小,图片质量越低,体积越小。

4、压缩并保存图片

最后,我们将对图片进行压缩并保存到本地文件系统中。我们可以通过Imagick类的函数writeImage()来实现。例如:

$srcImg->resizeImage(200, 150, imagick::FILTER_LANCZOS, 1, true); 

$srcImg->writeImage('newImg.jpg'); 

$srcImg->destroy();

其中,resizeImage()函数用于设置压缩后图片的大小, 个参数是宽度,第二个参数是高度,第三个参数是压缩算法,第四个参数是设备像素比,第五个参数是是否保持宽高比。

二、图片水印

图片水印是指为一张图片添加一个特定的标记或者文字,以表明图像的归属、作者或其他相关信息。在PHP中,实现图片水印同样有多种方式,下面我们将介绍两种常用的方式。

方法一:使用GD库

1、打开图片

同样地,要添加水印,首先要将原始图片读取到内存中。我们可以使用GD库提供的imagecreatefromjpeg()函数、imagecreatefrompng()函数、imagecreatefromgif()函数、imagecreatefromwbmp()函数等来打开不同格式的图片。

2、创建新的画布

接下来,要创建新的画布,用于存放添加水印后的图片。可以使用GD库提供的imagecreatetruecolor()函数来创建一个真彩色画布。

3、复制原始图像

将原始图像复制到新画布中。

4、添加水印

根据需求,添加图像水印或文字水印。可以使用imagecopy()函数添加图像水印,也可以使用imagettftext()函数添加文字水印。例如:

// 添加图像水印

$watermark = imagecreatefrompng('watermark.png');

imagecopy($newImg, $watermark, imagesx($newImg) - imagesx($watermark) - 10, imagesy($newImg) - imagesy($watermark) - 10, 0, 0, imagesx($watermark), imagesy($watermark));

imagedestroy($watermark);

// 添加文字水印

$text = '水印';

$color = imagecolorallocatealpha($newImg, 255, 255, 255, 60);

$font = 'msyh.ttf';

imagettftext($newImg, 20, 0, 20, 30, $color, $font, $text);

其中, 个参数是新的画布,第二个参数是水印图片或文字,第三和第四个参数是水印位置,第五和第六个参数是水印放置的坐标,其余参数根据需求而定。

5、保存图片

将添加水印后的图片保存到本地文件系统中。可以使用GD库提供的imagejpeg()函数、imagepng()函数、imagegif()函数来保存不同格式的图片。

方法二:使用ImageMagick库

1、打开图片

同样地,要添加水印,首先要将原始图片读取到内存中。我们可以使用ImageMagick提供的Imagick类的读取函数。

2、添加水