【黄啊码】PHP压缩图片(简洁易懂版,不懂我下次不写)

news2024/11/25 12:31:53

大家好,我是黄啊码,今天我们来解决一件头疼的事情。作为技术人员,我们一般传图片都知道尽量传清晰和大小适中的图片,部署的时候当然也希望客户能按说明办事,但有的客户偏偏不听,就传大的,就传大的,最终后宫服务器三千都顶不住他们的折腾,程序员心里苦,但不敢说啊,只能让代码自行解决吧。

解决前提:php版本*1,服务器*1,数据库(不需要,扔了吧)

备用函数:imagecreatetruecolor、imagecopyresampled、image_type_to_extension、getimagesize、imagedestroy

php实现图片压缩的方法:首先通过getimagesize获取图片属性,接着将原图复制到图片载体上,并按照一定比例压缩;最后输出图片即可。

很简单吧?

简单我就不用写教程了,你也不用看到这篇文章了。来,大郎,随我一起走:

list($width, $height, $img_type, $attr) = getimagesize($img);//获取图片大小等属性

//构建跟该图片属性一样的图片对象
$imageinfo = array( 'width' => $width, 'height' => $height, 'type' => image_type_to_extension($img_type, false), 'attr' => $attr );

//用fun函数执行
$fun = "imagecreatefrom" . $imageinfo['type'];

$image = $fun($img); 

//注意这里的percent,是压缩的比例,比如压缩10%,那percent=90%; 


new_width = $imageinfo['width'] * $percent;

$new_height = $imageinfo['height'] * $percent;

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

//将原图复制带图片载体上面,并且按照一定比例压缩,极大的保持了清晰度 imagecopyresampled($image_thump, $image, 0, 0, 0, 0, $new_width, $new_height, $imageinfo['width'], $imageinfo['height']);

//最后自己new出来的资源别忘了销毁,别让人知道你还不会

imagedestroy($image);

//可图片在哪?不着急,还在。别忘了告诉代码你要生成什么类型的图片

$image = $image_thump;

$func = 'image' . $imageinfo['type'];

//然后告诉他你要生成在哪里,记住服务器资源有限,别到处乱生,不然以后滴血认亲都找不到它

$func($image,"图片生成地址")

至此,php压缩图片到处完成,还会不会?会了赶紧关掉啊,别让boss以为你整天只会百度!

好了,今天的课程学到这里,有问题的留个言,别忘了一键三连,下次我们还会再见!

我是黄啊码,码字的码,退。。。退。。。退。。。朝! 

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

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

相关文章

Python标准库glob模块详解

glob是python中的内置模块,该模块主要是用来查找文件与目录的。glob模块是按照 Unix shell 所使用的规则找出所有匹配特定模式的路径名称。我们只需要了解该模块的匹配规则与常用函数,就会使文件查找,路径匹配变得非常快捷简单。 1.匹配规则…

【springboot整合ES】springboot整合ES

springboot整合ES 在Springboot整合ES提供了启动依赖jar。 该jar包封了一个类: RestHighLevelClient 该类可以对象ES中各个接口进行相应的操作。 1. 新建项目 创建springboot工程并导入相关的依赖 2.3.12.RELEASE。最新版spring boot2.7.5中RestHighLevelClient已过时 2. 创建…

python_爬虫

定时、定量、制定目标的数据搜集程序。 技术库 网络请求 urllibrequests(三方)/ urllib3selenium(UI自动测试、动态js渲染)appium(手机App的爬虫或UI测试) urllib requests 基于urllib和urllib3封装的…

什么是“孤岛效应”? ----防孤岛保护装置

防孤岛保护是对分布式光伏电站有着重要保护作用的。即当电网出现电压高、电压低、频率高、频率低故障时,光伏并网开关及时跳闸。当电网恢复供电并且电压和频率达到允许值时,并网开关要自动合闸。这样的目的是在为了国家电网不受太大影响的情况下&#xf…

理解透C语言一维数组,二维数组这一篇就够啦!

前言 💖作者:龟龟不断向前 ✨简介:宁愿做一只不停跑的慢乌龟,也不想当一只三分钟热度的兔子。 👻专栏:C初阶知识点 👻工具分享: 刷题: 牛客网 leetcode笔记软件&#xff…

网站部署:使用Nginx部署vue项目到阿里云服务器

最近租了个阿里云的服务器,想使用Nginx把刚做好的网站部署上去 下载Nginx 目前yum已经有了Nginx的源,因此可以直接用yum下载和安装 yum -y install nginx默认的安装位置为/etc/nginx 默认的项目位置为/usr/share/nginx 如果安装失败检查是否安装了zli…

渗透测试-CTF文件类型操作

识别文件类型 文件分离 文件合并 识别文件类型 当文件没有后缀名或者有后缀名无法正常打开时,根据识别的文件类型来修改后缀名即可正常打开文件。 使用场景:不知道后缀名,无法打开文件。 第一种方式:kali中使用 file 文件名 f…

173:vue+openlayers:解决国内openstreetmap地图加载不出来的问题(代码示例)

第173个 点击查看专栏目录 近来写程序,发现openlayers用OSM方式来加载OpenStreetMap地图,一片爆红,瓦片加载不出来。 本示例的目的是介绍演示如何在vue+openlayers中解决OpenStreetMap地图在国内被DNS污染,加载不出来瓦片的问题,通常我们是直接引用OSM,这里采用的是XYZ方…

2022年11月第十四届蓝桥杯校模拟赛详解+代码(一)

“须知少时凌云志,自许人间第一流” 鄙人11月八号有幸参加学校蓝桥杯校选拔赛,题型为5道填空题,5道编程题,总时间为小时。奈何能力有限,只完成了5道填空和3道编程大题,现进行自省自纠,分享学习&…

国产ETL工具 BeeDI 产品“实时同步“之 高阶 功能组件

BeeDI 提供“ 实时”企业数据集成。实时组件通过实时处理和传输业务数据的能力,增强了BeeDI的批处理功能。为满足当下复杂的业务需求,IT部门需要实时集成以加快核心业务流程和信息流。使用实时功能,IT部门可以使用统一界面,从BeeD…

【Mybatis】mybatis使用与理解

1. mybatis基础环境搭建 若想使用mybatis,需要有如下两个jar包:①mybatis的核心jar包。②数据库驱动包。 (想使用别人提供的服务就必须要有别人的jar包;mybatis是和数据库打交道的,那么你的程序中,数据库的…

【MySQL高级】MySQL的锁机制

目录 概述 MyISAM 表锁 InnoDB行锁 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制(避免争抢)。 在数据库中,除传统的 计算资源(如 CPU、RAM、I/O 等)的争用以外,数据也是一种供许多用户共…

重装系统后要安装哪些驱动

​重装win10后需要安装驱动吗?win10系统比win7系统高级的地方在于系统内置了很多驱动,这可以省去用户很多安装时间,下面小编来告诉大家重装系统后要安装的驱动有哪些。 工具/原料: 系统版本:windows10系统 品牌型号&#xff1…

mysql8其它新特性

文章目录MySQL8.0新特性新特性1:窗口函数序号函数ROW_NUMBER()函数RANK()函数DENSE_RANK()函数分布函数PERCENT_RANK()CUME_DIST()函数前后函数LAG(expr,n)函数LEAD(expr,n)函数首尾函数FIRST_VALUE(expr)函数LAST_VALUE(expr)函数其它函数NTH_VALUE(expr,n)函数NTI…

Docker 常用命令大全

个人理解 docker中的镜像 就像是咱们java 中的Class ,而容器呢 是基于这个镜像构建出的实例 类似于咱java 中 根据Class构造出的一个个实例对象 ,本人是初学者 理解有误还请见谅,并麻烦您说说您的看法让彼此相互学习… 按我理解 简言之 doc…

Java-日期类,正则实验

1. 随机产生两个日期时间,输入按时间先后顺序输出 public class RandomDate {SuppressWarnings("deprecation")public static void main(String[] args) throws ParseException {SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd HH:mm:ss&…

二分查找 【模板+中间值问题】

全文目录😃前言😕二分查找动图演示😴代码模板❗️ 使用哪个模板问题 ❗️💢 mid为何1问题 💢😃前言 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。…

[解决]github上传大文件卡住

0x00 需求 github目前的策略是超过50M的文件不允许上传,推荐使用lfs。 0x01 操作 再把之前提交的commit 回滚: git reset --hard commitId 在配置lfs: git lfs install git lfs track "*.zip" git lfs track "*.jar" git…

【K8S】亲和、反亲和、污点、容忍

文章目录【K8S】亲和、反亲和、污点、容忍K8s调度亲和与反亲和Pod和Node硬亲和和软亲和requiredDuringSchedulingIgnoredDuringExecution:硬策略preferredDuringSchedulingIgnoredDuringExecution:软策略污点与容忍污点(Taint)污点…

Python学习----基础语法2

布尔类型 布尔本质上是 1 和 0 if 基本语法格式 语法还是比较简单的 , 需要注意的是 , Python是通过空格缩进来判断代码块归属的 ( 不像java这么通过 花括号进行区分 ) , 默认是四个空格 , 你也可以使用两个或者三个等 , 只要全部统一即可 , 但是编辑器会有提示 , 规范是四…