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

掌握PHP中图片处理函数的使用方法

发布时间:2023-06-11 14:56:50

在Web开发中,图片处理是非常常见的操作,在PHP中也提供了很多图片处理函数,这些函数可以让我们方便地完成图片的裁剪、缩放、加水印等操作。在本文中,将介绍一些常用的PHP图片处理函数及其使用方法。

一、图片基础

在图片处理前,我们首先需要了解一些图片的基础知识:

1. 图片格式:常见的图片格式有JPEG、PNG、GIF等。

2. 图片类型:在PHP中,使用image_type_to_mime_type()函数获取图片类型。

3. 图片解析:PHP中解析图片可使用imagecreatefromjpeg()、imagecreatefrompng()、imagecreatefromgif()函数进行解析。

4. 图片输出:PHP中输出图片可使用imagepng()、imagejpeg()、imagegif()等函数。

二、常用的图片处理函数

1. 剪裁

剪裁图片可使用imagecopyresampled()函数,该函数可以将源图像的一部分剪裁后嵌入绘图目标。函数参数如下:

bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )

其中,$dst_image是绘制目标,$src_image是源图像,$dst_x、$dst_y是目标图像的起始坐标,$src_x、$src_y是源图像的起始坐标,$dst_w、$dst_h是目标图像的宽和高,$src_w、$src_h是源图像的宽和高。

2. 缩放

缩放图片可使用imagecopyresampled()函数实现,只需将函数参数中的$dst_w和$dst_h修改为需要缩放后的宽和高即可,如下所示:

bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )

3. 加文字水印

加文字水印可使用imagestring()函数实现,该函数可向指定的图像中写入字符串。函数参数如下:

bool imagestring ( resource $image , int $font , int $x , int $y , string $string , int $color )

其中,$image是图像资源,$font是写入的字体,$x、$y是起始坐标,$string是要写入的字符串,$color是字体颜色。

4. 加图片水印

加图片水印可使用imagecopy()函数实现,该函数将指定文件的一部分拷贝到目标文件中。函数参数如下:

bool imagecopy ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h )

其中,$dst_image是目标文件,$src_image是源文件,$dst_x、$dst_y是目标文件的坐标,$src_x、$src_y是源文件的坐标,$src_w、$src_h是源文件的宽和高。

5. 生成验证码图片

生成验证码图片可使用imagestring()和imagecreatetruecolor()函数结合使用,imagestring()函数用于向图像中写入字符串,imagecreatetruecolor()函数用于创建一个真彩色图像。函数参数如下:

resource imagecreatetruecolor ( int $width , int $height )

bool imagestring ( resource $image , int $font , int $x , int $y , string $string , int $color )

其中,$width和$height是图像的宽和高,$font是写入的字体,$x和$y是起始坐标,$string是要写入的字符串,$color是字体颜色。

三、实例演示

下面通过一个实例演示一下如何使用PHP中的图片处理函数实现图片剪裁和加水印操作。

实例1:图片剪裁

在代码中,首先将原图片读取到内存中,使用imagecopyresampled()函数将图片剪裁到指定大小,并将剪裁后的图片保存到新的文件中。

<?php

// 剪裁图片

function cutImg($src_file, $dst_file, $dst_w, $dst_h) {

    list($src_w, $src_h, $src_type) = getimagesize($src_file);

    if ($src_type == 2) {

        $src_image = imagecreatefromjpeg($src_file);

    } else if ($src_type == 3) {

        $src_image = imagecreatefrompng($src_file);

    } else {

        return false;

    }

    $dst_image = imagecreatetruecolor($dst_w, $dst_h);

    imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);

    if ($src_type == 2) {

        imagejpeg($dst_image, $dst_file);

    } else if ($src_type == 3) {

        imagepng($dst_image, $dst_file);

    }

    imagedestroy($src_image);

    imagedestroy($dst_image);

    return true;

}

?>

实例2:图片加水印

在代码中,首先将原图片读取到内存中,然后再将水印图片读取到内存中,使用imagecopy()函数将水印图片加到原图片上,并将加水印后的图片保存到新文件中。

<?php

// 加水印

function addWatermark($src_file, $mark_file, $dst_file) {

    list($src_w, $src_h, $src_type) = getimagesize($src_file);

    if ($src_type == 2) {

        $src_image = imagecreatefromjpeg($src_file);

    } else if ($src_type == 3) {

        $src_image = imagecreatefrompng($src_file);

    } else {

        return false;

    }

    list($mark_w, $mark_h, $mark_type) = getimagesize($mark_file);

    if ($mark_type == 2) {

        $mark_image = imagecreatefromjpeg($mark_file);

    } else if ($mark_type == 3) {

        $mark_image = imagecreatefrompng($mark_file);

    } else {

        return false;

    }

    $dst_image = imagecreatetruecolor($src_w, $src_h);

    imagecopy($dst_image, $src_image, 0, 0, 0, 0, $src_w, $src_h);

    imagecopy($dst_image, $mark_image, 10, 10, 0, 0, $mark_w, $mark_h);

    if ($src_type == 2) {

        imagejpeg($dst_image, $dst_file);

    } else if ($src_type == 3) {

        imagepng($dst_image, $dst_file);

    }

    imagedestroy($src_image);

    imagedestroy($mark_image);

    imagedestroy($dst_image);

    return true;

}

?>

结语

通过本文的介绍,相信大家对PHP中的图片处理函数有了更深入的了解。在实际的开发中,应按照实际需求选择对应的函数进行操作,以达到更好的处理效果。