PHP8用imagejpeg,imagegif,imagepng给图片添加水印失败原因查找
更新:2022-04-17 08:41:05
人气:1586
来源:本站原创
A+
在李雷博客的后台发布文章时,会对内容中的所有图片增加水印,但最近将PHP版本升级到PHP8.1以后,图片增加水印时失败了,程序直接卡死无返回值。经过一步一步的找查错误,最后发现问题出现在了以下代码中:
private function output($image){//输出图像
switch($this->imgtype){
case 1:
imagegif($image, $this->endaddress,100); //参数个数好像也不正确
break;
case 2:
imagejpeg($image, $this->endaddress,100);
break;
case 3:
imagepng($image, $this->endaddress,100);//$quality参数取值范围0-99 在php 5.1.2之后变更为0-9
break;
default:
return false;
}
}之前已经处理过一次是对于李雷PHP博客后台上传图片增加水印时用到的imagepng函数中参数quality取值范围的BUG,在PHP5.2版本以后,quality的值不再是0至100,而是0至9了,这里只要将100改为9即可。再看看下面的函数说明:
bool imagegif ( resource image [, string filename] ) bool imagejpeg ( resource image [, string filename [, int quality]] ) bool imagepng ( resource image [, string filename] ) bool imagewbmp ( resource image [, string filename [, int foreground]] ) 参数说明: 参数 说明 image 要输出的图像资源,可用 imagecreate() 或 imagecreatefrom 系列函数的返回值 filename 可选参数,指定输出图像的文件名。如省略,则原始图像流将被直接输出。 quality 可选参数,指定图像质量,范围从 0(质量差,文件小)到 100(质量好,文件大),默认值75
能看出quality的值是可选参数,而我这次的问题是出在了imagejpeg和imagegif中,索性直接将quality值100全部取消改为以下代码,让其用默认值运行:
switch($this->imgtype){
case 1:
imagegif($image, $this->endaddress);
break;
case 2:
imagejpeg($image, $this->endaddress);
break;
case 3:
imagepng($image, $this->endaddress);
break;
default:
return false;
}取消参数后,改用参数的默认值完美运行,所以在PHP版本升级的过程中会遇到各种问题,还要慢慢探索。
推荐的文章
随手记
- ● 统信UOS系统如何设置指定时间自动重启系统的方法
- ● 自制(IP或域名)可信任的SSL证书,适用360、chrome等浏览器
- ● windows系统下php无法使用curl怎么办?
- ● 绿联UGREENKVM切换器(分屏器)快捷键丢失解决办法
- ● 统信UOS开机指定网址全屏启动自带浏览器以及屏蔽ALT+F4关闭
- ● xshellSSH连接Linux服务器防止超时退出
- ● php8开启OpenSSL扩展库报错disabledinstallext
- ● 统信系统linux安装php时的报错libxml-2.0>=2.7.6
- ● tidb关闭sql_mode=ONLY_FULL_GROUP_BY模式
- ● windows10如何开机自动运行bat文件
PHP经验分享
- ● PHP批量对TCP服务端指定多个IP非阻塞检查在线状态
- ● python实现TCP服务端持续接收关机、重启指令并输出结果【系列三】
- ● PHP给TCP服务端发送指令【系列二】
- ● PHP判断TCP服务端是否在线【系列一】
- ● PHP判断远程文件是否存在
- ● LINUX下用PHP获取CPU型号、内存占用、硬盘占用等信息代码
- ● PHP代码用UDP方式远程唤醒电脑让计算机开机
- ● apache下php生成验证码图片不能显示
- ● PHP使用AES加密解密示例(无偏移)
- ● Pluginmysql_native_passwordreported:''mysql_native_password'isdeprecate问题








