PHP快速入门10-图像处理,附图像大小调整、旋转、获取颜色等15个常见示例

news2024/12/24 17:48:26

文章目录

  • 前言
  • 一、PHP的图像处理
    • 1.1 图像处理函数
  • 二、 图像处理示例
    • 2.1 创建一个空白的图像
    • 2.2 从文件创建一个新的图像
    • 2.3 从URL创建一个新的图像
    • 2.4 调整图像大小
    • 2.5 对比度和亮度调整
    • 2.6 度数旋转
    • 2.7 模糊滤镜
    • 2.8 获取图像的颜色信息
    • 2.9. 图像合并
    • 2.10 图像旋转和裁剪
    • 2.11 图像的灰度化
    • 2.12 图像的反色处理
    • 2.13 图像的锐化处理
    • 2.14 图像的马赛克处理
    • 2.15 图像的透明度调整
  • 总结


前言

本文已收录于PHP全栈系列专栏:PHP快速入门与实战

在这里插入图片描述

一、PHP的图像处理

PHP是一种服务器端脚本语言,可用于创建动态 Web 页面。PHP的图像处理能力强大,可以使用各种函数和扩展来编辑、创建和合成图像。

1.1 图像处理函数

以下是一些常用的图像处理函数:

  • imagecreatetruecolor() 创建一个真彩色图像。
  • imagecreatefromjpeg() 从 JPEG 文件或 URL 创建一个新的图像。
  • imagecreatefrompng() 从 PNG 文件或 URL 创建一个新的图像。
  • imagecreatefromgif() 从 GIF 文件或 URL 创建一个新的图像。
  • imagecopyresampled() 重采样拷贝部分图像并调整大小。
  • imagecopymerge() 将一幅图像中的一块区域与另一幅图像进行合并。
  • imagepng() 输出 PNG 图像到浏览器或文件。
  • imagejpeg() 输出 JPEG 图像到浏览器或文件。
  • imagegif() 输出 GIF 图像到浏览器或文件。

二、 图像处理示例

以下是15个示例代码,演示了PHP图像处理的不同方面:

2.1 创建一个空白的图像

// 创建一个宽为200,高为100的空白png图像
$im = imagecreatetruecolor(200, 100);

// 把背景设置为白色
$white = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $white);

// 输出图像
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);

2.2 从文件创建一个新的图像

// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');

// 输出图像
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);

2.3 从URL创建一个新的图像

// 从URL中创建一个png图像
$im = imagecreatefrompng('http://example.com/image.png');

// 输出图像
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);

2.4 调整图像大小

// 创建一个宽为200,高为100的空白png图像
$im = imagecreatetruecolor(200, 100);

// 把背景设置为白色
$white = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $white);

// 调整图像大小为宽为400,高为200
$new_im = imagecreatetruecolor(400, 200);
imagecopyresampled($new_im, $im, 0, 0, 0, 0, 400, 200, 200, 100);

// 输出图像
header('Content-type: image/png');
imagepng($new_im);
imagedestroy($im);
imagedestroy($new_im);

2.5 对比度和亮度调整

// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');

// 增加对比度和亮度
imagefilter($im, IMG_FILTER_CONTRAST, 50);
imagefilter($im, IMG_FILTER_BRIGHTNESS, 50);

// 输出图像
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);

2.6 度数旋转

// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');

// 顺时针旋转45度
$im = imagerotate($im, 45, 0);

// 输出图像
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);

2.7 模糊滤镜

// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');

// 应用高斯模糊滤镜
imagefilter($im, IMG_FILTER_GAUSSIAN_BLUR);

// 输出图像
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);

2.8 获取图像的颜色信息

// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');

// 获取像素点(10,10)的颜色
$rgb = imagecolorat($im, 10, 10);
$colors = imagecolorsforindex($im, $rgb);

// 输出颜色信息
echo 'Red: ' . $colors['red'] . '<br>';
echo 'Green: ' . $colors['green'] . '<br>';
echo 'Blue: ' . $colors['blue'] . '<br>';

imagedestroy($im);

2.9. 图像合并

// 创建一个宽为200,高为100的空白png图像
$im = imagecreatetruecolor(200, 100);

// 把背景设置为白色
$white = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $white);

// 从文件中创建一个jpg图像
$overlay = imagecreatefromjpeg('myphoto.jpg');

// 将图像合并
imagecopymerge($im, $overlay, 50, 25, 0, 0, 100, 50, 80);

// 输出图像
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
imagedestroy($overlay);

2.10 图像旋转和裁剪

// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');

// 顺时针旋转45度
$im = imagerotate($im, 45, 0);

// 裁剪图像
$im = imagecrop($im, ['x' => 50, 'y' => 50, 'width' => 150, 'height' => 75]);

// 输出图像
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);

2.11 图像的灰度化

// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');

// 变成灰度图像
imagefilter($im, IMG_FILTER_GRAYSCALE);

// 输出图像
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);

2.12 图像的反色处理

// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');

// 变成反色
imagefilter($im, IMG_FILTER_NEGATE);

// 输出图像
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);

2.13 图像的锐化处理

// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');

// 锐化图像
imagefilter($im, IMG_FILTER_CONTRAST, -255);
imagefilter($im, IMG_FILTER_SMOOTH, -10);

// 输出图像
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);

2.14 图像的马赛克处理

// 创建一个宽为200,高为100的空白png图像
$im = imagecreatetruecolor(200, 100);

// 把背景设置为白色
$white = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $white);

// 在图像中绘制一条红线
$red = imagecolorallocate($im, 255, 0, 0);
imageline($im, 0, 50, 200, 50, $red);

// 马赛克处理
imagefilter($im, IMG_FILTER_PIXELATE, 10);

// 输出图像
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);

2.15 图像的透明度调整

// 原始图片路径
$srcImgPath = 'path/to/source/image.jpg';

// 目标图片路径
$dstImgPath = 'path/to/destination/image.jpg';

// 透明度值(0~100,0表示完全透明,100表示不透明)
$alpha = 50;

// 创建原始图片资源
$srcImg = imagecreatefromjpeg($srcImgPath);

// 获取原始图片宽高
$srcWidth = imagesx($srcImg);
$srcHeight = imagesy($srcImg);

// 创建目标图片资源
$dstImg = imagecreatetruecolor($srcWidth, $srcHeight);

// 设置目标图片透明度
imagefill($dstImg, 0, 0, imagecolorallocatealpha($dstImg, 0, 0, 0, 127));
imagesavealpha($dstImg, true);

// 复制原始图片到目标图片,并设置透明度
imagecopymerge($dstImg, $srcImg, 0, 0, 0, 0, $srcWidth, $srcHeight, $alpha);

// 输出目标图片
header('Content-Type: image/jpeg');
imagejpeg($dstImg, $dstImgPath);

// 销毁资源
imagedestroy($srcImg);
imagedestroy($dstImg);

以上代码实现的功能是给一张图片添加透明度并输出到浏览器或保存到文件中。具体实现步骤为:

  1. 获取原始图片和目标图片的路径和透明度值。
  2. 使用imagecreatefromjpeg()函数创建原始图片资源。
  3. 获取原始图片的宽高。
  4. 使用imagecreatetruecolor()函数创建目标图片资源。
  5. 设置目标图片的透明度,使用imagefill()函数填充一个半透明的背景,并使用imagesavealpha()函数保存透明度信息。
  6. 使用imagecopymerge()函数复制原始图片到目标图片,并设置透明度。
  7. 输出目标图片到浏览器或保存到文件中,使用header()函数设置输出类型和imagejpeg()函数输出图片。
  8. 销毁资源,使用imagedestroy()函数。

注意事项:

  1. 本示例代码仅适用于处理JPEG格式的图片,如果是其他格式的图片则需要使用对应的函数创建资源和输出图片。
  2. 在使用imagecopymerge()函数设置透明度时,第9个参数表示透明度,取值在0~100之间,0表示完全透明,100表示不透明。
  3. 如果需要在原始图片上添加透明度而不是创建一个新的图片,则可以直接在原始图片上操作,去掉创建目标图片的步骤。

总结

以上就是关于本篇文章介绍的内容,图像处理,后续更多内容将收录在专栏PHP快速入门与实战中,感谢大家支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/426340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

css补充内容

1.最好给body设置min-width,防止缩小页面时出现空白 2.让图片随着网页缩小而缩小 3.html5语义化元素 4.video与audio video是行内替换元素 默认是第一帧静态画面,需要手动调整画面大小和添加播放条,是否自动播放 大多数浏览器不支持自动播放,除非设置为muted,这是为了用户的…

小巧“抠门”的FTHR-F0140开发板

小巧“抠门”的FTHR-F0140开发板 文章目录小巧“抠门”的FTHR-F0140开发板缘起硬件电路主控芯片供电系统调试器插座LED灯按键CAN接口电路软件资源资源链接缘起 工欲善其事&#xff0c;必先利其器。调试和开发MM32F0140这种小巧的芯片&#xff0c;还是需要小巧的板子去适配&…

本科也可入行的IC模拟版图,需要学习哪些知识?

IC模拟版图是一个入门非常简单&#xff0c;但同时又是一份涉及知识面非常广阔&#xff0c;资深较难的工作。 在众多IC岗位中&#xff0c;模拟版图确实属于容易入门&#xff0c;吸引来很多想要转行IC行业的朋友&#xff0c;但需要掌握的知识点和技巧并不比设计少&#xff0c;属…

Python+Selenium+Unittest 之selenium5--元素定位4-XPath定位1(基本概念)

目录 一、简介 二、节点关系 三、绝对路径与相对路径 一、简介 Xpath定位在selenium中属于常用的定位方式&#xff0c;首先来说下Xpath的一些概念&#xff0c;Xpath即为XML路径语言&#xff08;XML Path Language&#xff09;&#xff0c;它是一种用来确定XML文档中某部分位置…

Vision Transformers for Dense Prediction论文笔记

文章目录Vision Transformers for Dense Prediction&#xff0c; ICCV&#xff0c; 2021一、背景介绍二、网络结构三、实验结果1.语义分割实验2.消融实验Vision Transformers for Dense Prediction&#xff0c; ICCV&#xff0c; 2021 一、背景介绍 本篇论文主要提出一种网络…

SpringBoot 集成webSocket

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

IT软件行业用契约锁实现“代理-销售-投标-项目-合作”电子签

IT软件行业产品销售渠道多、销售订单体量大&#xff0c;从产品研发、销售到项目实施&#xff0c;伴随着大量的协议、合同、单据需要与员工、客户或者经销商签署。引入电子签章&#xff0c;化解纸质合同签署带来的效率、成本、安全等问题&#xff0c;成为软件行业产品代理、销售…

Vector - CAPL - Panel面板_01

前面有过简单的介绍panel面板的功能&#xff0c;不过终究感觉有点简陋&#xff0c;最近也在搞PyQT5&#xff0c;发现如果对于这块了解不多的情况下&#xff0c;想要做一些东西的话&#xff0c;简直无从下手&#xff0c;因此专门翻阅了之前的文章&#xff0c;查看了下确实缺少了…

ChatGPT自动化提高工作效率: 2分钟快速生成思维导图

一、简要说明 ChatGPT不止是一个聊天机器人&#xff0c;更是一个自然语言处理、文本内容生成模型&#xff0c;它可以理解语言规则&#xff0c;不仅仅是给你输出已有的知识内容&#xff0c;还会给到你一些创意点子&#xff1b;所以我们应该学会如何使用它&#xff0c;让它更好的…

集合例题,

package com.hspedu.homework;import java.util.*;/*** author 韩顺平* version 1.0*/ SuppressWarnings({"all"}) public class Homework03 {public static void main(String[] args) {Map m new HashMap();m.put("jack", 650);//int->Integerm.put(&…

STL源码剖析-六大部件, 部件的关系,复杂度, 区间表示

C标准库-体系结构与内核分析 根据源代码来分析 介绍 自学C侯捷老师的STL源码剖析的个人笔记&#xff0c;方便以后进行学习&#xff0c;查询。 为什么要学STL&#xff1f;按侯捷老师的话来说就是&#xff1a;使用一个东西&#xff0c;却不明白它的道理&#xff0c;不高明&…

分享一个Vue输入框获取焦点自动选中指令

需求背景&#xff1a;最近项目中遇到很多输入类控件&#xff0c;且有频繁改动需求&#xff0c;如果数值过长&#xff0c;则需要一直按着删除键&#xff0c;于是想能不能获取焦点的时候&#xff0c;就直接选中&#xff0c;这样就可以直接删除了 1、思路分析 记得很早的时候做小…

顺序表的实现

思维导图&#xff1a; 一&#xff0c;顺序表 一&#xff0c;顺序表的创建&#xff08;位置&#xff1a;头文件内&#xff09; 1.1顺序表的结构体类型 要求&#xff1a;创建顺序表并使这个顺序表能够存放数据&#xff0c;能记录有效数据的个数&#xff0c;能够记录容量大小。…

记 ==> 首次使用rabbitMQ优化项目

昨天刚学习完了rabbitMQ&#xff0c;刚好我的项目有个模块挺符合使用rabbitMQ进行异步处理的。 这个模块大概功能是&#xff1a;用户发送的所有帖子都会添加到他的发件箱&#xff0c;当有个新用户关注了他&#xff0c;他发件箱内所有的博客都会被添加到关注他的用户的收件箱里…

binkw32dll缺失怎么办?如何解决binkw32dll修复问题

binkw32dll缺失怎么办&#xff1f;在使用某些计算机游戏或应用程序时&#xff0c;您可能遇到过binkw32dll缺失的问题。这意味着您的计算机无法找到该DLL文件&#xff0c;从而无法正常运行程序。在本文中&#xff0c;我们将探讨binkw32.dll缺失的可能原因并提供解决方案。 一.什…

python flask 接口平台开发

文章目录descFlaskFlask-SQLAlchemyflasggerdesc 考虑到开发的便捷性、生态的丰富程度&#xff0c;用Flask、Flask-SQLAlchemy、flasgger等编写一套简单易用的接口平台 这里记录以下这几个组件的使用方式 Flask 轻量、灵活&#xff0c;相比Django不用遵循太多的开发规范 F…

SSM整合的基本思路梳理

SSM整合的简单思路流程 基本思路 我在整合的时候一般习惯从MyBatis开始向上构建&#xff0c;也就是在开始一个项目的时候先将DAO层搭建起来&#xff0c;再向上整合Spring以及SpringMVC。按照这个流程&#xff0c;可以做出一个比较简单的大致流程作为参考&#xff0c;帮助我们…

企业为什么要做网站?这篇文章告诉你

在如今数字化的时代&#xff0c;企业为什么要做网站&#xff1f;这个问题一直都是企业主和市场营销人员必须要考虑的问题。本文将以一个真实的案例为例&#xff0c;解析为什么企业要做网站以及如何通过网站提升业务和品牌的影响力。 案例背景 以一家小型私人医疗诊所为例&…

【神经网络】tensorflow实验4--Matplotlib数据可视化

1. 实验目的 ①掌握Matplotlib绘图基础 ②运用Matplotlib&#xff0c;实现数据集的可视化 ③运用Pandas访问数据集 2. 实验内容 ①绘制散点图、直方图和折线图&#xff0c;对数据进行可视化 ②下载波士顿数房价据集&#xff0c;并绘制数据集中各个属性与房价之间的散点图&#…

人人可用的敏捷指标工具!Kyligence Zen 正式发布 GA 版

4 月 11 日&#xff0c;Kyligence 指标平台产品发布会成功召开。发布会上&#xff0c;一站式指标平台 Kyligence Zen 正式推出 GA 版&#xff0c;接下来这款人人可用的敏捷指标工具将以更加完善、成熟、稳定的产品性能与功能解决企业面临的指标管理、分析和应用痛点 &#xff0…