PHP8用imagejpeg,imagegif,imagepng给图片添加水印失败原因查找
更新:2022-04-17 08:41:05
人气:1051
来源:本站原创
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版本升级的过程中会遇到各种问题,还要慢慢探索。
推荐的文章
随手记
- ● blob:http地址的原理及生成方法
- ● 华视CVR100系统身份证读卡器web驱动安装不识别解决办法
- ● web应用采用webcam实现拍照上传的PHP示例及参数说明
- ● PHP实现直播推流功能
- ● win10开机后屏幕黑屏只有鼠标但能启动任务管理器
- ● base64.js文件下载及使用方法说明
- ● windows利用bat微信双开、多开
- ● 百度API提交推送报{"error":401,"message":"tokenisnotvalid"}什么原因
- ● 如果在调用创建群接口时没有保存OpenConversationId,可以通过调用本接口通过chatId获取OpenConversationId
- ● Windows中使用BAT文件设置指定IP地址或自动获取IP
PHP经验分享
- ● 如何开启PHP8的JIT提升运行速度
- ● 钉钉API接口-用PHP+Curl实现获取用户信息
- ● 钉钉API接口-用PHP+Curl实现获取应用Access_Token
- ● 在PHP中使用CURL,“撩”服务器只需几行——phpcurl详细解析和常见大坑
- ● MySQLInnodb并发涉及参数说明
- ● mysql参数调优之innodb_thread_concurrency、innodb_concurrency_tickets合理的使用cpu性能
- ● PHP用fsockopen检测指定IP端口是否开启可用
- ● PHP用socket检测服务器IP端口是否开放?代码示例
- ● GatewayWorker报错:Waring:Events::onMessageisnotcallable
- ● PHP监控指定IP端口接收到的数据的实现代码