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

PHP图片处理函数汇总及实例演示

发布时间:2023-06-18 17:06:26

在网站开发中,图片处理一直是一个非常重要的工作。PHP作为一种流行的服务器端编程语言,提供了很多图片处理函数,可以轻松处理各种图片格式,比如生成缩略图、添加水印、旋转、裁剪等等。本文将介绍一些必备的图片处理函数,并提供一些实例演示。

一、生成缩略图

生成缩略图是图片处理中最常见的操作之一。PHP提供了几种生成缩略图的函数,这里我们介绍一个最基础的函数。

function create_thumbnail($original_image_path, $thumbnail_image_path, $max_height, $max_width)
{
    list($original_width, $original_height, $original_type) = getimagesize($original_image_path);

    $width_ratio = $original_width / $max_width;
    $height_ratio = $original_height / $max_height;

    if ($width_ratio >= $height_ratio) {
        $new_width = $max_width;
        $new_height = $original_height / $width_ratio;
    } else {
        $new_width = $original_width / $height_ratio;
        $new_height = $max_height;
    }

    switch ($original_type) {
        case IMAGETYPE_GIF:
            $old_image = imagecreatefromgif($original_image_path);
            break;
        case IMAGETYPE_JPEG:
            $old_image = imagecreatefromjpeg($original_image_path);
            break;
        case IMAGETYPE_PNG:
            $old_image = imagecreatefrompng($original_image_path);
            break;
        default:
            return false;
    }

    $new_image = imagecreatetruecolor($new_width, $new_height);

    imagecopyresampled($new_image, $old_image, 0, 0, 0, 0, $new_width, $new_height, $original_width, $original_height);

    switch ($original_type) {
        case IMAGETYPE_GIF:
            imagegif($new_image, $thumbnail_image_path);
            break;
        case IMAGETYPE_JPEG:
            imagejpeg($new_image, $thumbnail_image_path, 90);
            break;
        case IMAGETYPE_PNG:
            imagepng($new_image, $thumbnail_image_path);
            break;
        default:
            return false;
    }

    imagedestroy($old_image);
    imagedestroy($new_image);

    return true;
}

这个函数接收四个参数:

- $original_image_path:原始图片的路径。

- $thumbnail_image_path:缩略图的路径。

- $max_height:缩略图最大高度。

- $max_width:缩略图最大宽度。

我们首先使用getimagesize函数获取原始图片的相关信息,然后计算出缩略图的尺寸。接着根据原始图片的类型创建一个新的图片,并将原始图片缩放到新的尺寸。最后,根据原始图片的类型保存新的缩略图。函数返回true表示生成成功,返回false则表示生成失败。

二、添加水印

添加水印是常见的图片处理操作之一,也可以提高图片的版权保护。这里我们介绍一个用于添加文本水印的函数。

function add_text_watermark($image_path, $text, $font_path, $font_size, $opacity, $position)
{
    $image_info = getimagesize($image_path);
    $image_width = $image_info[0];
    $image_height = $image_info[1];
    $image_type = $image_info[2];

    switch ($image_type) {
        case IMAGETYPE_GIF:
            $image = imagecreatefromgif($image_path);
            break;
        case IMAGETYPE_JPEG:
            $image = imagecreatefromjpeg($image_path);
            break;
        case IMAGETYPE_PNG:
            $image = imagecreatefrompng($image_path);
            break;
        default:
            return false;
    }

    $color = imagecolorallocatealpha($image, 255, 255, 255, $opacity);
    $text_box = imagettfbbox($font_size, 0, $font_path, $text);
    $text_width = $text_box[2] - $text_box[0];
    $text_height = $text_box[1] - $text_box[7];

    switch ($position) {
        case 'top-left':
            $x = 0;
            $y = 0;
            break;
        case 'top-center':
            $x = ($image_width - $text_width) / 2;
            $y = 0;
            break;
        case 'top-right':
            $x = $image_width - $text_width;
            $y = 0;
            break;
        case 'middle-left':
            $x = 0;
            $y = ($image_height + $text_height) / 2;
            break;
        case 'middle-center':
            $x = ($image_width - $text_width) / 2;
            $y = ($image_height + $text_height) / 2;
            break;
        case 'middle-right':
            $x = $image_width - $text_width;
            $y = ($image_height + $text_height) / 2;
            break;
        case 'bottom-left':
            $x = 0;
            $y = $image_height - $text_height;
            break;
        case 'bottom-center':
            $x = ($image_width - $text_width) / 2;
            $y = $image_height - $text_height;
            break;
        case 'bottom-right':
            $x = $image_width - $text_width;
            $y = $image_height - $text_height;
            break;
        default:
            return false;
    }

    imagettftext($image, $font_size, 0, $x, $y, $color, $font_path, $text);

    switch ($image_type) {
        case IMAGETYPE_GIF:
            imagegif($image, $image_path);
            break;
        case IMAGETYPE_JPEG:
            imagejpeg($image, $image_path, 90);
            break;
        case IMAGETYPE_PNG:
            imagepng($image, $image_path);
            break;
        default:
            return false;
    }

    imagedestroy($image);

    return true;
}

这个函数接收六个参数:

- $image_path:要添加水印的图片路径。

- $text:水印文本。

- $font_path:字体文件路径。

- $font_size:字体大小。

- $opacity:水印透明度。

- $position:水印位置,可以是top-left、top-center、top-right、middle-left、middle-center、middle-right、bottom-left、bottom-center、bottom-right。

函数的实现比较简单。首先,我们根据原始图片的类型创建一个新的图片对象。接着,根据传入的参数,计算文本框的宽度和高度,并根据位置参数计算文本框的坐标。最后,在图片上绘制文本,并根据原始图片的类型保存水印图片。

三、旋转图片

旋转图片是常见的图片处理操作之一。这里我们介绍一个简单的旋转图片函数。

function rotate_image($image_path, $degrees)
{
    $image_info = getimagesize($image_path);
    $image_type = $image_info[2];

    switch ($image_type) {
        case IMAGETYPE_GIF:
            $image = imagecreatefromgif($image_path);
            break;
        case IMAGETYPE_JPEG:
            $image = imagecreatefromjpeg($image_path);
            break;
        case IMAGETYPE_PNG:
            $image = imagecreatefrompng($image_path);
            break;
        default:
            return false;
    }

    $rotated_image = imagerotate($image, $degrees, 0);

    switch ($image_type) {
        case IMAGETYPE_GIF:
            imagegif($rotated_image, $image_path);
            break;
        case IMAGETYPE_JPEG:
            imagejpeg($rotated_image, $image_path, 90);
            break;
        case IMAGETYPE_PNG:
            imagepng($rotated_image, $image_path);
            break;
        default:
            return false;
    }

    imagedestroy($image);
    imagedestroy($rotated_image);

    return true;
}

这个函数接收两个参数:

- $image_path:要旋转的图片路径。

- $degrees:逆时针旋转角度。

函数的实现非常简单,只需要根据原始图片的类型创建一个新的图片对象