PHP ImageMagick - 快速指南


PHP ImageMagick - 简介

我们知道图像是改善任何网站用户体验的简单方法。许多实验证明,我们的大脑解释图像的速度比文本快得多。它们还有助于吸引注意力并引发情绪。在呈现重要信息时,图像具有很大的价值。

我们如何动态创建或编辑图像,使其适合 Web 应用程序?“ImageMagick”就是这么做的!

什么是 ImageMagick?

ImageMagick 是一个免费提供的强大工具和库集合,用于对数字图像执行许多操作。

  • 它是一个用于读取、创建、编辑、撰写、转换和写入各种格式图像的软件套件。

  • 这些格式包括 DPX、EXR、GIF、JPG、JPEG、PNG、TIFF 等(超过 200 种格式)。

  • 这些操作可通过命令行或 C、C++、Perl、Java、PHP 或 Python 编程语言进行。在本教程中,我们将学习 PHP 中的 ImageMagick。

什么是 PHP?

PHP 代表超文本预处理器。它是一种嵌入在 HTML 中的服务器端脚本语言。它包含各种内置功能,可以实现快速开发。这些脚本在服务器上执行,并且该软件可以免费下载和使用。

PHP 中的 ImageMagick 是什么?

PHP 中的 ImageMagick 是一个本机扩展,可以对图像执行所有操作。操作还包括调整大小、翻转、镜像、旋转、扭曲、变换图像、调整图像颜色,甚至绘制文本、直线、多边形、椭圆和曲线。

  • 它是免费软件,以可立即运行的二进制发行版或源代码形式提供,您可以在开放和专有应用程序中使用、复制、修改和分发。

  • 它利用多个计算线程来提高性能,并且可以读取、处理或写入兆、千兆或兆像素图像大小。

  • 它可以在 Linux、Windows、Mac OS X、iOS、Android 操作系统等上运行。

安装和配置

我们知道 PHP 是一种服务器端脚本语言,最好使用 Apache、Nginx 等任何 Web 服务器来运行 PHP 脚本。这允许您从浏览器运行 PHP 脚本。

还有另一种方法可以使用命令行来执行 PHP 脚本。这不需要安装任何网络服务器。在本教程中,您将学习使用 Apache 服务器实现 ImageMagick 功能。为此,我们安装 XAMPP。

XAMPP 代表平台、A pache、M aria DB、P HP、P erl。它是由 Apache Friends 开发的免费开源跨平台 Web 服务器解决方案堆栈包,主要由 Apache HTTP 服务器、Maria DB 以及 PHP 和 Perl 编程语言编写的脚本解释器组成。

安装XAMPP:

在本节中,您将能够了解安装 XAMPP 的分步过程。

第 1 步- 打开此网站 - https://www.apachefriends.org

步骤 2 - 安装适合您的操作系统 (Windows/Linux/IOS) 的最新版本的 XAMPP。

步骤 3 - 下载的文件类似于“xampp-windows-x64-7.4.27-2-VC15-installer”。

步骤 4 - 运行下载的文件。您会收到一些警告,请单击“确定”。

步骤 5 - 出现以下屏幕,单击“下一步”。

安装XAMPP

步骤 6 - 选择 Apache、MySQL、PHP 和 phpMyAdmin。并单击“下一步”。

安装XAMPP

步骤 7 - 在此步骤中,选择任何特定文件夹,否则,您可以保留原样(默认)。点击下一步'。

安装XAMPP

步骤 8 - 在下一步中,文件将自动解压。该过程完成后,单击“下一步”。

步骤 9 - 完成 100% 后,单击“下一步”。

步骤 10 - 现在,出现一个对话框,其中包含“完成 XAMPP 安装向导”,然后单击“完成”。

安装 ImageMagick

在本节中,您将学习如何在 PHP 中安装 ImageMagick 扩展和安装程序。

步骤 1 - 打开网站https://mlocati.github.io

步骤 2 - 根据您的 PHP 配置、架构和 XAMPP 版本的线程安全性下载 ImageMagick 扩展和安装程序。

  • 下载的安装程序文件的格式为“ImageMagick-7.1.0-18-vc15-x64.zip”

  • 下载的 ImageMagick 扩展的格式为“php-imagick-3.7.0-7.4-ts-vc15-x64.zip”。

安装XAMPP

安装XAMPP

步骤 3 - 从下载的扩展文件中提取所有文件(来自(b))。然后从这些文件中复制“php_imagemagick.dll”文件。

步骤 4 - 将文件粘贴到 PHP 安装的“ext”目录中。

安装XAMPP

步骤 5 - 从下载的安装程序文件中提取所有文件(来自(a))。从中复制以 CORE_DL / IM_MOP_RL/FILTER 开头的所有文件(DLL 文件)。这些文件从“CORE_RL_bzlib_.dll”开始,如下图所示。选择文件,直到以“IM_MOD_RL_yuv_.dll”结尾

安装XAMPP

步骤 6 - 将这些文件粘贴到 PHP 根目录中,其中包含“php.exe”。

安装XAMPP

步骤 7 - 现在,转到 XAMPP 控制面板。停止阿帕奇。

步骤 8 - 单击“配置”并选择 PHP (php.ini) 文件。

安装XAMPP

步骤 9 - 在该文件中,找到该代码中的“扩展”。在“extension=php_ftp.dll”行之后,输入“extension=php_imagick.dll”。保存文件。

安装XAMPP

步骤 10 - 重新启动 Apache。

步骤 11 - 安装完成。

确认

在直接跳到执行部分之前,我们首先检查一下您系统上的 PHP 中是否正确安装了 Imagemagick。为此,请按照以下步骤操作。

步骤 1 - 转到浏览器并单击“localhost”。

步骤 2 - 转到右上角的“phpinfo” 。

步骤 3 - 搜索 Imagick。屏幕必须如下所示。

确认

步骤 4 - 如果出现,则 Imagick 设置已成功完成。该包包含 Imagick 模块版本、Imagick 类、发布日期和所有支持的格式。

PHP ImageMagick - 背景颜色

图像文本的背景颜色是指其背景的颜色。使用合适的颜色来补充图像或文本的上下文有助于提高可读性,甚至更容易扫描。

例如,在下图中,我们可以看到“TUTORIALS POINT”写在朴素的背景上,不太可读。为此元素选择合适的背景颜色可以提高其可见性。

PHP Imagemagick 背景颜色

如果我们看下图,我们可以发现这比上一张图像更具可读性,主要原因是它的背景颜色。

PHP Imagemagick 背景颜色

在下面的部分中,我们将学习如何识别图像的背景颜色,以及如何设置图像的背景颜色。

识别背景颜色

为了使用 ImageMagick 识别图像的背景颜色,我们有一个名为“getImageBackgroundColor()”的方法。如果图像中未指定或未找到任何内容,则默认背景颜色为“白色”。

句法

public Imagick :: getImageBackgroundColor() :  ImagickPixel

此方法不带任何参数。返回值采用 RGB 三元组的形式,它是一个三元素行向量。每个元素指定所选颜色的红色、绿色和蓝色分量。因此,根据该三元组,用户将能够识别背景中存在的颜色。

例子

以下示例演示如何使用PHP 中的getImageBackgroundColor()方法获取图像的背景颜色。要执行代码,您需要一个本地服务器环境,例如 XAMPP。

该代码首先创建一个 Imagick 对象,然后使用此函数检索背景颜色。最后,它会在服务器上打印出该颜色的 RGB 三元组表示形式。

<?php
   //creating a new imagick object //
   $img=new Imagick($_SERVER['DOCUMENT_ROOT'].'/test/image.jpg');
   $color=new ImagickPixel($img->getImageBackgroundColor) ;//Get the Background Color
   $colorInfo = $color->getColorAsString (); //Get the Color from ImagickPixel
   echo $colorInfo; //display colorinfo as output
?>

假设以下是程序中的输入图像(image.jpg) -

识别背景颜色

输出

srgb(0, 0, 0)

获得的输出是 srgb (0,0,0),即“黑色”。

设置背景颜色

在某些情况下,我们需要为图像设置背景颜色,尤其是带有文本的图像以增加其可读性。要在 PHP 中设置图像的背景颜色,我们使用“setImageBackgroundColor()”方法。

句法

该方法的语法如下所示 -

public Imagick::setImageBackgroundColor(mixed $background): bool

此方法接受“背景”作为参数,其中包含所需的背景颜色。执行成功后,返回 true 并生成指定背景颜色的图像。

例子

此 PHP 代码片段展示了如何使用“setImageBackgroundColor()”函数设置图像的背景颜色。

  • 首先,创建一个新的 Imagick 对象,并将图像作为输入读入。然后,使用内置函数 setImageBackgroundColor() 设置背景颜色。

  • 输出可以使用 echo 显示在服务器上,也可以使用writeImage()保存在本地。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.png");
   $image->setImageBackgroundColor('black');
   $image->setImageAlphaChannel(100);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/newimage.png");
?>

假设以下是程序中的输入图像(image.png) -

设置背景颜色

输出

设置背景颜色

PHP ImageMagick - 图像反射

图像反射是一种图像处理技术,用于创建镜像或对称图案。这种效果是通过水平或垂直复制和翻转图像来实现的,创建原始图像的镜像版本。

在本章中,我们将探讨如何使用 PHP Imagemagick 库轻松创建图像反射。我们将介绍反射类型、尺寸调整和颜色操作等基本概念,让您全面了解该过程,并帮助您快速轻松地创建美丽的反射效果。

图像翻转

翻转图像是垂直复制该图像的过程。因此,为了翻转图像,我们在 Imagemagick 中有一个方法“flipImage()”。此功能有助于显示输入的垂直镜像。

句法

bool Imagick::flipImage(void)

该函数不接受任何参数。

例子

在此示例中,您将学习如何在 PHP 中使用“flipImage()”函数。首先,创建一个新的 Imagick 对象并读取输入图像。然后,使用flipImage()方法将其垂直翻转。您可以直接在服务器上显示翻转的图像,也可以使用writeImage() 将其保存到您的系统中。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.jpg");
   $image->flipImage();
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/flipImage.png");
?>

假设以下是程序中的输入图像(image.jpg) -

图像翻转

输出

图像翻转

图像抖动

翻转图像是水平复制该图像的过程。因此,为了翻转图像,我们在 Imagemagick 中有一个方法“flopImage()”。此功能有助于显示输入的水平镜像。

句法

bool Imagick::flopImage(void)

该函数不接受任何参数。

例子

在此示例中,您将了解如何使用PHP 中的“flopImage()”函数翻转图像。首先,创建一个新的 Imagick 对象并读取输入图像。接下来,使用“flopImage()”函数将其水平翻转。翻转的图像将作为输出返回。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.jpg");
   $image->flopImage();
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/flopImage.png");
?>

假设以下是程序中的输入图像(image.jpg) -

图像抖动

输出

图像抖动

PHP ImageMagick - 图像裁剪

图像裁剪涉及剪切图像的部分或通过修剪掉不重要的部分来减小图像的大小。这使您可以只关注图像中的重要元素,同时丢弃任何不必要的元素。

使用 ImageMagick 进行图像裁剪是快速编辑图像的好方法,无需任何特殊软件或复杂的图形设计技术知识。

在本章中,您将学习使用 ImageMagick 库提供的内置函数裁剪图像。

图像裁剪

从图像中提取区域称为“裁剪”。它只不过是去除图像中不需要的边缘或获取图像的特定部分。这可以在 PHP 中使用 Imagemagick 中名为“cropImage()”的方法来完成。

句法

public Imagick::cropImage(int $width, int $height, int $x, int $y) : bool

参数

该方法接受 4 个参数,分别是宽度、高度、x 和 y。

  • 宽度- 作物的宽度,

  • 高度- 作物的高度,

  • x - 裁剪区域左上角的 X 坐标。

  • y - 裁剪区域左上角的 Y 坐标。

获得的输出将是根据该方法中作为参数给出的测量结果裁剪的图像。

例子

在以下示例中,创建了 Imagick 对象并读取输入图像。随后,使用“cropImage()”函数,根据函数内提供的参数裁剪图像。输出(即裁剪后的图像)可以直接显示在服务器上,也可以使用“writeImage()”函数以任何所需的名称和格式保存到系统中 。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.jpg");
   $image->cropImage(800, 750, 200, 100);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/newimage.png");
?>

假设以下是程序中的输入图像(image.jpg) -

图像裁剪

输出

图像裁剪

创建裁剪的缩略图

缩略图是以较小图像的形式表示较大图像。它旨在使查看或管理一组较大图像变得更加容易和快捷。ImageMagick 通过提供“cropThumbnailImage()”方法帮助我们创建裁剪后的缩略图

句法

public Imagick::cropThumbnailImage(int $width, int $height, bool $legacy = false): bool

此方法通过首先放大或缩小图像并从中心裁剪指定区域来帮助创建固定大小的缩略图。

该方法有 2 个参数:宽度和高度。它们分别指定缩略图的宽度和高度。

例子

在下面的示例中,创建了 imagick 对象。然后,使用“cropThumbnailImage()”函数获得固定大小的缩略图,并使用“writeImage()”函数获得输出。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.jpg");
   $image->cropThumbnailImage(100, 100);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/newimage.png");
?>

假设以下是程序中的输入图像(image.jpg) -

创建裁剪的缩略图

输出

创建裁剪的缩略图

切割图像

有时,在选择图像时,不需要整个图像。在您想要提取图像或仅提取图像的特定区域的情况下,“chopImage()”函数可以帮助我们。此功能帮助我们根据用户的要求删除图像的某个区域并修剪图像。

句法

public Imagick::chopImage (int $width, int $height,int $x,int $y): bool

该函数有 4 个参数,即

  • width - width 也是一个整数值,存储切割区域的宽度。

  • height - Height' 是一个整数值,存储切割区域的高度

  • x - 切割区域的 x 坐标。

  • 切割区域的 Y − y 坐标。

例子

在下面的示例中,您将学习如何使用“chopImage()”函数。首先,创建一个 Imagick 对象并给出图像作为输入。

然后,将“chopImage()”应用到图像上,参数包括宽度、高度、x 坐标和 y 坐标。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.jpeg");
   $image->chopImage (400, 40, 2, 2);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/chopImage.png");
?>

假设以下是程序中的输入图像(image.jpeg) -

切割图像

输出

切割图像

PHP ImageMagick - 图像边框

数字显示器上显示的每张图片都有黑色、白色或彩色背景。因此,区分背景和照片对于定义图像的视觉限制至关重要。

这种分离的必要性在黑色或白色背景中更加明显。因此,为了达到此目的,必须为照片添加边框。在本章中,您将学习使用 Imagemagick 的一些内置函数在 PHP 中为图像添加边框。

添加 3D 边框

可以使用 Imagemagick 提供的内置函数“frameImage()”将 3D 边框添加到图像中。

句法

public Imagick::frameImage(mixed $matte_color, int $width, int $height, int $inner_bevel, int $outer_bevel): bool

该方法有5个参数

  • matte-color - 它是表示哑光颜色的字符串。

  • width - 表示边​​框的宽度。

  • height - 表示边​​框的高度。

  • inner_bevel - 表示内斜角的宽度。

  • outer_bevel - 表示外斜角的宽度。

获得的输出是带有边框的图像,该边框具有指定的尺寸和颜色。

例子

以下程序展示了如何在 PHP 中使用 Imagick 库创建新的图像文件。它使用现有图像创建 Imagick 类的对象,在其周围添加具有特定参数的框架(在本例中为粉红色和 100x100 像素,边框为 10px),然后将修改后的图像写入为 PNG 文件。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.jpg");
   $image->frameImage('pink', 100, 100, 10, 10);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/newimage.png");
?>

假设以下是程序中的输入图像(image.jpg) -

添加 3D 边框

输出

添加 3D 边框

添加普通边框

Imagemagick 提供了一种方法“borderImage()”,可以为图像添加边框。它将图像作为输入并生成带有边框的图像作为输出。

句法

public Imagick::borderImage(mixed $bordercolor, int $width, int $height): bool

该函数有3个参数,分别是边框颜色、宽度和高度。

  • bordercolor是一个imagickpixel对象或包含边框颜色字符串。

  • 宽度和高度是保存边框宽度和高度的整数值

例子

以下程序展示了如何在 PHP 中使用 Imagick 库创建带有 25px 黄色边框的图像。它从“test/image.png”文件中读取图像,并将其写为带有添加边框的“test/borderImage.png”。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.png");
   $image->borderImage('yellow', 25, 25);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/borderImage.png");
?>

假设以下是程序中的输入图像(image.png) -

添加普通边框

输出

添加普通边框

PHP ImageMagick - 调整图像大小

在本章中,您将学习使用 Imagemagick 提供的各种内置函数自适应地调整图像大小并缩放特定尺寸的图像。

使用 ImageMagick 调整图像大小时,您可以通过缩放或裁剪两种不同的方式来实现。缩放将导致尺寸按比例增加或减小,而裁剪将根据用户设置的特定参数剪掉原始图像的部分内容。

自适应调整图像大小

在很多情况下,我们希望将图像稍微缩小到较小的“网页尺寸”。为此,Imagemagick 提供了一个方法,即“adaptiveResizeImage()”,它有助于自适应地调整图像大小。这也避免了急剧的颜色变化造成的模糊。

句法

public Imagick::adaptiveResizeImage(int $columns, int $rows, bool $bestfit = false, bool $legacy = false): bool

该方法的参数是列、行最佳拟合。

  • columns指定缩放图像中的列数。

  • rows表示缩放图像中的行数

  • bestfit指定是否使图像适合边界框内。

例子

下面通过例子来演示如何在PHP中实现该功能。首先创建一个新的 Imagick 对象并获取输入图像。然后,在该输入图像上应用“adaptiveResizeImage()”方法。最后,将输出图像保存为“adaptiveResizeImage.png”。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.jpg");
   $image->adaptiveResizeImage(2000, 1000);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/adaptiveResizeImage.png");
?>

假设以下是程序中的输入图像(image.jpg) -

自适应调整图像大小

输出

自适应调整图像大小

将图像缩放至所需尺寸

为了使图像适合网站,必须有一些所需的尺寸。将图像缩放到这些尺寸将删除不必要的像素或创建或添加新的像素细节。ImageMagick 允许我们使用“resizeImage()”方法在 PHP 中调整图像大小它将图像作为输入并根据所需的尺寸调整其大小并给出输出。

为了确保图像适合网站,必须将它们缩放到特定尺寸。ImageMagick 的“resizeImage()”方法允许我们在 PHP 中执行此操作,它将图像作为输入并根据所需的尺寸调整其大小并返回结果图像。

句法

public Imagick::resizeImage(int $columns, int $rows, int $filter, float $blur, bool $bestfit=false, bool $legacy=false):bool

resizeImage()方法的参数有 columns、rows、filter、blur 和 bestfit。

  • 是分别指定图像的宽度和高度的整数值。

  • filter是一个整数值,引用过滤器常量列表,如filter_point、filter_box、filter_triangle 等。

  • 模糊因子是浮点值。如果模糊因子大于1,则图像模糊,如果小于1,则图像清晰。

  • bestfit是一个可选的拟合参数。

例子

以下是使用 PHP 调整图像大小的示例。在这里我们创建一个新的 Imagick 对象和一个空图像(用于输入)。然后,对创建的图像调用“resizeImage()”方法。输出将为 PNG 格式并命名为“resizeImage”。

<?php
   $img=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.jpg");
   $img->resizeImage(200, 300, null, null, null, null);
   $img->writeImage($_SERVER['DOCUMENT_ROOT']."/test/newimage.png");
?>

假设以下是程序中的输入图像(image.jpg) -

将图像缩放至所需尺寸

输出

将图像缩放至所需尺寸

PHP ImageMagick - 复合图像

将两张或多张图像组合起来创建新的图像称为合成摄影。组合后的照片称为合成图像。将不同来源的视觉元素组合成单个图像通常会产生所有这些元素都是同一图像的一部分的错觉。

手动执行此操作会成为一项非常复杂的任务,并且需要花费数小时。为了使这个过程变得简单快速,Imagemagick 提供了一个名为“compositeImage()”的方法,该方法将两个图像作为输入并提供组合图像作为输出。

句法

public Imagick::compositeImage(Imagick $composite_object, int $composite, int $x, int $y, int $channel = Imagick::CHANNEL_DEFAULT): bool

该方法的参数是composite_object、x、y和channel。“Composite_object”是一个保存合成图像的 Imagick 对象。

“x”是合成图像的列偏移,“y”是合成图像的行偏移。“通道”提供对您的通道模式有效的任何通道常量。

例子

此示例是一个实现“compositeImage()”函数的 PHP 代码片段。首先,创建两个 imagick 对象,并将两张图像作为输入。两个图像都是在“compositeImage()”函数的帮助下合成的,输出图像的格式为“compositeImage.png”。

<?php
   $image1=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image1.jpg");
   $image2=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image2.jpg");
   $image1->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
   $image1->setImageArtifact('compose:args', "1,0,-0.5,0.5");
   $image1->compositeImage($image2, Imagick::COMPOSITE_MATHEMATICS, 0, 0);
   $image1->writeImage($_SERVER['DOCUMENT_ROOT']."/test/compositeImage.png");
?>

假设以下是程序中的输入图像(image1.jpg) -

合成图像

假设以下是程序中的输入图像(image2.jpg) -

合成图像

输出

合成图像

PHP ImageMagick - 对比度和亮度

借助对比,可以在图像中传达不同类型的情绪。术语“对比度”是指颜色或灰度差异的程度。具有较高对比度的图像通常比较低对比度的图像显示更大程度的颜色或灰度变化。在本章中,您将学习如何更改和调整对比度和亮度。

改变对比度

在本节中,您将了解更改对比度的过程。这可以使用Imagemagick 提供的名为“contrastImage()”的方法来完成。它有助于增强图像中较亮和较暗元素之间的差异。

句法

public Imagick::contrastImage(bool  $sharpen): bool

此方法包含一个“锐化”参数。它是一个布尔值,指定锐化值。该方法将图像作为输入,并给出改变其对比度后的图像作为输出。

例子

在下面的示例中,创建了新的 imagick 对象并获取输入图像。然后,contrastImage()函数应用于该图像。最后,以“contrastImage.png”格式获得输出图像。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.jpeg");
   $image->contrastImage(true);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/contrastImage.png");
?>

假设以下是程序中的输入图像(image.jpeg) -

改变对比度

输出

改变对比度

改变亮度

ImageMagick 提供了一种名为“brightnessContrastImage()”的方法,该方法可以更改图像的亮度和对比度。它将亮度和对比度参数转换为斜率和截距,并调用多项式函数应用于图像。

句法

Public Imagick::brightnessContrastImage(float $brightness, float $contrast, int $channel=Imagick::CHANNEL_DEFAULT):bool

该方法包含3个参数,分别是亮度、对比度和通道。“Brightness”用于存储亮度值,“Contrast”用于存储图像对比度值,“channel”用于存储通道值。获得的输出是增加了亮度和对比度的图像。

例子

在下面的示例中,创建了一个新的 imagick 对象并获取输入图像。然后,将带有参数(亮度=15,对比度=20)的“brightnessContrastImage()”函数应用于该图像。最后,以“brightnessContrastImage.png”格式获得输出图像。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image5.jpeg");
   $image->brightnessContrastImage(15,50);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/brightnessContrastImage.png");
?>

假设以下是程序中的输入图像(image5.jpeg) -

改变亮度

输出

改变亮度

增强对比度

增强是提高图像质量的过程。为了增强对比度,Imagemagick 提供了一种方法“contrastStretchImage()”,该方法通过调整像素颜色以跨越整个可用颜色范围来增强彩色图像的对比度。

句法

public Imagick::contrastStretchImage(float $black_point, float $white_point, int $channel = Imagick::CHANNEL_DEFAULT): bool

该方法有三个参数,分别是black_point、white_point和channel。“Black_point”指定黑点,“white_point”指定白点,“channel”提供对您的通道模式有效的任何通道常量。

例子

在下面的示例中,创建了一个新的 Imagick 对象并获取输入图像。然后,将带有参数(black_point=1000,white_point=5000)的“contrastStretchImage()”函数应用于该图像。最后,以“contrastStretchImage.png”格式获得输出图像。

该方法有三个参数,分别是black_point、white_point和channel。“Black_point”指定黑点,“white_point”指定白点,“channel”提供对您的通道模式有效的任何通道常量。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.jpeg");
   $image->contrastStretchImage(1000, 5000);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/contrastStretchImage.png");
?>

假设以下是程序中的输入图像(image.jpeg) -

增强对比度

输出

增强对比度

PHP ImageMagick - 增强和均衡

增强图像

图像增强是改善图像的视觉外观或质量的过程。这可以通过多种技术来实现,例如调整亮度和对比度、色彩平衡、锐化或模糊边缘、改变分辨率和噪声消除。

Imagemagick 提供了一个函数“enhanceImage()”。它将图像作为输入,通过提高图像质量来增强图像,并生成增强后的图像作为输出。

句法

public Imagick::enhanceImage(): bool

该函数没有参数。

例子

此示例代表实现函数“enhanceImage()”的 PHP 代码。首先创建新的 imagick,然后应用“enhanceImage()”函数并以“enhanceImage.png”格式获得输出。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.jpeg");
   $image->enhanceImage();
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/enhanceImage.png");
?>

假设以下是程序中的输入图像(image.jpg) -

增强图像

输出

增强图像

均衡图像

均衡图像是调整图像对比度和亮度以使其看起来更加平衡的过程。均衡可以帮助呈现阴影和高光的细节,并提高色彩准确性并减少噪点。

在此过程中,可以基于直方图均衡(一种计算机图像处理技术)来增加或减少对比度。在本节中,您将学习使用 Imagemagick 提供的“equalizeImage()”函数来均衡图像。

句法

public Imagick::equalizeImage(): bool

该函数没有参数。它将图像作为输入并生成均衡图像作为输出。

例子

此示例显示了PHP 中“equalizeImage()”函数的实现。创建 imagick 对象后读取输入图像,然后将“equalizeImage()”函数应用于该输入图像。最终输出图像以“equalizeImage.png”格式获得。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.jpeg");
   $image->equalizeImage();
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/equalizeImage.png");
?>

假设以下是程序中的输入图像(image.jpeg) -

均衡图像

输出

均衡图像

PHP ImageMagick - 锐化和模糊

锐化成像

为了使图像看起来更清晰,Imagemagick 提供了一个内置函数“adaptiveSharpenImage()”,可以自适应地锐化图像。它将图像作为输入并生成锐化图像作为输出。

此方法使用算法来检测图像中应应用锐化的区域,并相应地调整锐化量。与均匀锐化技术相比,这可以获得更自然的结果,而不会牺牲质量或在图像中引入伪影。

句法

public Imagick::adaptiveSharpenImage(float $radius, float $sigma, int $channel = Imagick::CHANNEL_DEFAULT): bool

该函数由半径、西格玛和通道三个参数组成。

  • Radius 是一个浮点值,指定高斯的半径(以像素为单位),不包括中心像素。

  • Sigma 是一个浮点值,指定高斯的标准差(以像素为单位)。

  • Channel 提供对您的通道模式有效的任何通道常量。

例子

为了清楚地了解如何实现这个功能,请看下面的例子。此代码创建一个 imagick 对象并输入图像。然后,应用“adaptiveSharpenImage()”函数以及所需的参数(半径=19,sigma=15)。输出图像以“adaptiveSharpenImage.png”的形式获得。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.png");
   $image->adaptiveSharpenImage(19,15);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/adaptiveSharpenImage.png");
?>

假设以下是程序中的输入图像(image.png) -

锐化成像

输出

锐化成像

图像模糊

模糊图像可以使颜色过渡平滑。通过模糊,像素强度的快速变化被平均。在本章中,您将学习借助 Imagemagick 提供的内置函数来模糊图像的不同方法。

PHP Image magick 库提供了一系列强大的函数,使用它们我们可以执行各种操作,包括模糊、调整大小、裁剪等。使用 PHP Imagemagick,您只需几行代码即可轻松模糊图像。

您还可以调整模糊的强度以及其他几个设置以达到所需的效果。无论您是在照片中寻找微妙还是戏剧性的变化,PHP Imagemagick 都能满足您创建令人惊叹的结果所需的一切!

添加模糊滤镜

为了在图像上添加模糊滤镜,Imagemagick 提供了一个名为'blurImage()'的方法。它将图像作为输入并生成/返回模糊图像。

句法

public Imagick::blurImage(float $radius, float $sigma, int $channel = ?): bool

该函数有 3 个参数:半径、西格玛和通道。

  • Radius是一个浮点值,指定需要模糊的半径。

  • 西格玛是一个浮点值,指定标准差。

  • 通道指定通道类型常量。当未指定通道时,所有通道都将被模糊。

例子

在下面的示例中,创建了一个新的 imagick 对象,并将图像作为输入。然后,应用“blurImage()”函数来模糊图像。半径和西格玛是函数内部指定的参数(半径=25,西格玛=5)。模糊图像以“blurImage.png”形式作为输出获得

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.png");
   $image->blurImage(25, 5);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/blurImage.png");
?>

假设以下是程序中的输入图像(image.png) -

添加模糊滤镜

输出

添加模糊滤镜

以一定角度应用模糊

Imagemagick 的“rotationalImageBlur()”函数可用于图像处理,允许用户以任何角度对图像应用模糊效果。它接受输入图像并生成具有所需模糊程度的模糊版本。

句法

public Imagick::rotationalBlurImage(float $angle, int $channel =Imagick::CHANNEL_DEFAULT):bool

该函数包含两个参数:角度和通道。

  • Angle 是一个浮点值,用于存储角度。

  • 通道是一个对您的通道模式有效的常量。

例子

在下面的 PHP 代码示例中,创建了一个新的 imagick 对象,并将图像作为输入。然后,应用“rotationalBlurImage()”函数在某个角度上模糊图像 (15)。模糊图像以“rotationalBlurImage.png”形式作为输出获得。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.png");
   $image->rotationalBlurImage (15);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/rotationalBlurImage.png");
?>

假设以下是程序中的输入图像(image.png) -

应用模糊某些角度

输出

应用模糊某些角度

模拟运动模糊

在图像中的移动物体中看到的模糊称为“运动模糊”。为了模拟运动模糊,Imagemagick 提供了一个内置函数“motionBlurImage()”。它将图像作为输入并生成运动模糊图像作为输出。

句法

public Imagick::motionBlurImage(float $radius, float $sigma, float $angle, int $channel =Imagick::CHANNEL_DEFAULT): bool

该函数包含 4 个参数,分别是半径、西格玛、角度和通道。

  • Radius 是一个浮点值,指定不包括中心像素的高斯半径(以像素为单位)。

  • sigma 是一个浮点值,指定高斯的标准差(以像素为单位)。

  • angle 也是一个浮点值,它指定模糊运动的角度。

  • Channel 是一个对您的通道模式有效的常量。

例子

在下面的示例中,创建了一个新的 Imagick 对象,并将图像作为输入。然后应用“motionBlurImage()”函数以半径 (20)、西格玛 (20) 和角度 (45) 作为参数来模糊图像。结果,可以以“motionBlurImage.png”的形式获得原始图像的模糊版本。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.png");
   $image->motionBlurImage(20, 20, 45);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/motionBlurImage.png");
?>

假设以下是程序中的输入图像(image.png) -

模拟运动模糊

输出

模拟运动模糊

PHP ImageMagick - 图像平铺

在本章中,您将学习重复平铺纹理图像。平铺纹理图像是创建图案的过程,其中纹理图像以平铺的形式重复。

使用 ImageMagick,您可以轻松地将图像平铺成大小相等的块。您还可以调整每块的大小和方向,以便您根据需要自定义平铺图像。在本教程中,我们将解释如何使用 PHP ImageMagick 的图像平铺来创建令人惊叹的美丽平铺图像,从而获得完美的效果!

句法

Imagick::textureImage(Imagick $texture_wand): Imagick

该函数由一个参数组成

  • “纹理棒”。它是一个用作纹理图像的 Imagick 对象。

  • 下面的例子是一个平铺图像的程序。除了“textureImage()”之外,该程序还使用了一些附加功能。

  • 新图像创建- 它涉及使用函数“newImage()”创建新图像,该函数将列大小和行大小作为参数。因此,创建了具有这些测量值的图像。

  • 缩放图像- 函数“scaleImage()”用于将图像缩放到特定尺寸,并且图像会随着这些尺寸而缩短,因此可以平铺在我们创建的新图像上。

该函数将图像作为输入,获得的输出是包含纹理图像图块图案的图像。

例子

下面的示例显示了“textureImage()”函数的实现。在这里,使用指定的测量值和颜色作为参数创建一个新的 Imagick 对象。

  • 图像格式也已设置。然后,通过创建新的 Imagick 对象将图像作为输入。

  • 现在,使用“scaleImage()”函数将图像缩放到某个特定尺寸。

  • 缩放后的图像连续平铺在开始时使用“textureImage()”函数创建的新图像上。

  • 最终输出以“textureImage.png”的形式获得。

<?php
   $img=new Imagick();
   $img->newImage(940, 670, new ImagickPixel('red'));
   $img->setImageFormat("jpg");
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.jpeg");
   $image->scaleimage($image->getimagewidth() / 8, $image->getimageheight() / 8);
   $img=$img->textureImage($image);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/textureImage.png");
?>

假设以下是程序中的输入图像(image.jpeg) -

图像平铺

输出

图像平铺

PHP ImageMagick - 图像阈值

在本章中,您将学习使用 ImageMagick 库的一些内置函数创建不同类型的阈值图像。

PHP Imagemagick 提供了广泛的功能,包括图像阈值处理。图像阈值允许您通过设置确定图像中像素的显示程度的特定限制或“阈值”来调整图像的对比度。

这使得创建对象和背景之间具有锐利边缘的高对比度图像以及平滑的渐变而没有粗糙的过渡成为可能。通过使用 PHP Imagemagick 的图像阈值功能,用户可以轻松地改进他们的数码照片和图形。

创建黑色阈值图像

“ blackThresholdImage ()”函数是 Imagemagick 库的一部分。它可用于通过应用与输入图像中的所有像素进行比较的阈值来快速轻松地修改图像。

任何值低于指定阈值的像素都将变为黑色,而任何高于阈值的像素将保持不变。

句法

public Imagick::blackThresholdImage(mixed $threshold): bool

该函数只有一个参数,即“阈值”。这指定了与图像的所有像素进行比较的阈值。

例子

此示例显示“blackThresholdImage()”函数的使用。创建一个 Imagick 对象并将图像作为输入。“blackThresholdImage()”函数应用阈值作为其参数,从而将输出图像保存为“blackThresholdImage.png”。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.png");
   $image->blackThresholdImage('rgb(1, 255, 141)');
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/blackThresholdImage.png");
?>

假设以下是程序中的输入图像(image.png) -

创建黑色阈值图像

输出

创建黑色阈值图像

创建白色阈值图像

“ whiteThresholdImage ()”函数使您能够设置指定的阈值,然后将其应用于输入图像的所有像素。低于阈值的那些值将转换为白色,而高于阈值的任何值保持不变。

这对于图像分割或噪声消除等任务非常有益,使您可以快速识别图像中需要进一步关注的部分。

句法

public Imagick::whiteThresholdImage(mixed $threshold): bool

它只有一个参数—— “阈值”。这指定了与图像的所有像素进行比较的阈值。

例子

以下示例演示了如何使用“whiteThresholdImage”函数。在这里,创建了一个 Imagick 对象,并将图像作为输入。然后应用“whiteThresholdImage”函数,并以阈值作为其参数。生成的图像保存为“whiteThresholdImage.png”。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/imagee.png");
   $image->whiteThresholdImage('rgb(1, 255, 141)');
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/whiteThresholdImage.png");
?>

假设以下是程序中的输入图像(image.png) -

创建白色阈值图像

输出

创建白色阈值图像

PHP ImageMagick - 修改颜色

在本章中,您将学习使用 Imagemagick 提供的一些内置函数来修改和替换图像中的不同颜色。

使用Imagemagick,您可以调整亮度、对比度、色调、饱和度和其他颜色参数。您甚至可以创建复杂的效果,例如合并多个图层或向照片添加特殊滤镜。本教程将概述 PHP Imagemagick 的工作原理以及如何使用它快速轻松地修改数字图像中的颜色。

为图像着色

Imagemagick 的“colorizeImage()”函数是更改图像任何部分颜色的有效方法。此功能的工作原理是将所选的填充颜色与图片中的每个像素混合,创建颜色之间的无缝过渡并产生专业外观的结果。

  • 该过程消除了与改变图像颜色相关的大部分体力劳动,例如选择特定区域或手绘部分。

  • 此外,它还可以节省时间,因为它允许用户快速轻松地进行这些更改,而不会牺牲质量。

句法

公共 Imagick::colorizeImage(混合 $colorize, 混合 $opacity, bool $legacy = false): bool

该函数有 2 个参数 -着色不透明度。

  • Colorize 是一个 Imagick 对象或包含 colorize 颜色的字符串,

  • opacity 是一个 Imagick 对象或包含不透明度值的浮点值。

如果不透明度为 1.0,则完全不透明,0.0 表示完全透明。

例子

在这个例子中,您将能够清楚地理解“colorizeImage()”的用法。首先创建一个 imagick 对象并获取输入图像。然后,应用“colorizeImage()”函数并获取所需的参数(colorize=red 和 opacity=1)。混合颜色后的图像使用“writeImage()”函数显示输出。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.png");
   $image->colorizeImage('red', 1, true);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/colorizeImage.png");
?<

假设以下是程序中的输入图像(image.png) -

为图像着色

输出

为图像着色

创建蓝移图像

当需要在月光下或夜间表示图像时,您可以使用“blueShiftImage()”方法来实现。该方法以图像为参数,对图像的颜色进行静音,以模拟月光下的夜间场景并产生输出图像。

  • 它还可能涉及调整亮度级别、饱和度、对比度和其他功能,以确保最终结果尽可能接近在自然光条件下观看这些图像时的预期结果。

  • 此外,该技术还可用于创意目的;通过操纵颜色值,可以在黄昏时分甚至在人工照明的室内拍摄照片来实现有趣的效果。

句法

public Imagick::blueShiftImage(float $factor = 1.5): bool

该函数采用一个因子值作为其参数。它指定使图像颜色静音的值。

例子

此示例显示“blueShiftImage()”函数的实现。创建一个新的 imagick 对象并将图像作为输入。现在,应用“blueShiftImage()”函数,并以因子作为参数,获得的输出图像的形式为“blueShiftImage.png”。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.png");
   $image->blueShiftImage(2);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/blueShiftImage.png");
?>

假设以下是程序中的输入图像(image.png)&Minus;

创建蓝移图像

输出

创建蓝移图像

替换图像中的颜色

在本节中,您将学习替换图像中的颜色。Imagemagick 中有一个名为“clutImage()”的内置函数来执行此任务。借助此功能,图像中的所有颜色都将替换为用户需要的特定颜色。该函数将图像作为输入,并在替换颜色后生成图像作为输出。

“clutImage()”函数用途广泛,可用于实现各种不同的效果。例如,您可以使用它通过用一种颜色替换原始图像中的所有颜色来创建单色图像。

您还可以使用它通过将较暗的色调替换为较亮的色调来为现有照片添加活力和对比度。

句法

public Imagick::clutImage(Imagick $lookup_table, int $channel =Imagick::CHANNEL_DEFAULT): bool

该函数接受 2 个参数。

  • lookup_table 这是一个包含颜色查找表的 Imagick 对象

  • Channel 是 Channeltype 常量。

例子

在以下示例中,创建了一个 <>bImagick 对象,并使用图像作为其输入。然后创建第二个 Imagick 对象并生成一个新图像,该图像从查找表中选择“紫色”。`clutImage()`方法用于替换颜色,其中指定了 'violet' 并且未声明 ChannelType 常量;因此,将使用默认通道。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/imagee.png");
   $clut = new Imagick();
   $clut->newImage(1, 1, new ImagickPixel('violet'));
   $image->clutImage($clut);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/clutImage.png");
?>

假设以下是程序中的输入图像(image.png) -

替换颜色图像

输出

替换颜色图像

图像的否定

否定图像中的颜色意味着颜色的反转或反转。例如,假设图像包含白色和黑色。取消颜色后,白色变为黑色,黑色变为白色。

'negateImage()'函数用于否定/反转 PHP ImageMagick 中的颜色,

您还可以使用此效果通过将浅色调更改为深色或将深色调更改为明亮色调来创建高对比度图像。此外,通过应用部分色彩否定,可以在图像中实现更微妙的色彩变化;这意味着只有图像的某些部分受到影响,而其他部分则保持不变。

句法

public Imagick::negateImage(bool $gray, int $channel =Imagick::CHANNEL_DEFAULT): bool

该函数接受 2 个参数:灰度和通道。

  • Gray是一个布尔值,决定是否对灰度像素取反