PHP8用imagejpeg,imagegif,imagepng给图片添加水印失败原因查找

后端开发   发布日期:2023年05月16日   浏览次数:566

在九品源码的后台发布文章时,会对内容中的所有图片增加水印,但最近将PHP版本升级到PHP8.1以后,图片增加水印时失败了,程序直接卡死无返回值。经过一步一步的找查错误,最后发现问题出现在了以下代码中:

  1. private function output($image){//输出图像
  2. switch($this->imgtype){
  3. case 1:
  4. imagegif($image, $this->endaddress,100); //参数个数好像也不正确
  5. break;
  6. case 2:
  7. imagejpeg($image, $this->endaddress,100);
  8. break;
  9. case 3:
  10. imagepng($image, $this->endaddress,100);//$quality参数取值范围0-99 在php 5.1.2之后变更为0-9
  11. break;
  12. default:
  13. return false;
  14. }
  15. }

之前已经处理过一次是对于李雷PHP博客后台上传图片增加水印时用到的imagepng函数中参数quality取值范围的BUG,在PHP5.2版本以后,quality的值不再是0至100,而是0至9了,这里只要将100改为9即可。再看看下面的函数说明:

  1. bool imagegif ( resource image [, string filename] )
  2. bool imagejpeg ( resource image [, string filename [, int quality]] )
  3. bool imagepng ( resource image [, string filename] )
  4. bool imagewbmp ( resource image [, string filename [, int foreground]] )
  5. 参数说明:
  6. 参数 说明
  7. image 要输出的图像资源,可用 imagecreate() imagecreatefrom 系列函数的返回值
  8. filename 可选参数,指定输出图像的文件名。如省略,则原始图像流将被直接输出。
  9. quality 可选参数,指定图像质量,范围从 0(质量差,文件小)到 100(质量好,文件大),默认值75

能看出quality的值是可选参数,而我这次的问题是出在了imagejpeg和imagegif中,索性直接将quality值100全部取消改为以下代码,让其用默认值运行:

  1. switch($this->imgtype){
  2. case 1:
  3. imagegif($image, $this->endaddress);
  4. break;
  5. case 2:
  6. imagejpeg($image, $this->endaddress);
  7. break;
  8. case 3:
  9. imagepng($image, $this->endaddress);
  10. break;
  11. default:
  12. return false;
  13. }

取消参数后,改用参数的默认值完美运行,所以在PHP版本升级的过程中会遇到各种问题,还要慢慢探索。

以上就是PHP8用imagejpeg,imagegif,imagepng给图片添加水印失败原因查找的详细内容,更多关于PHP8用imagejpeg,imagegif,imagepng给图片添加水印失败原因查找的资料请关注九品源码其它相关文章!