马上注册,结交更多好友,享用更多功能,让你轻松玩转南昌530论坛
您需要 登录 才可以下载或查看,没有账号?注册会员
×
注:大神请自行飘过,不要笑话! PHP生成ICO的源码在网上随便一搜到处都是,但是全部都是同一个版本,这个版本带了一大堆多余的代码不说,最重要的是同一个BUG:用PNG图片生成图标的时候不会透明,加上一个黑色的背景丑的要死。 经过查阅大量的资料,多次尝试(因为技术太菜只能一遍遍的测试),最终解决了这个问题,将解决过程记录如下: 备注:网上搜索到的大多数解决方案没能解决我的问题,不知道是不是我的方法不对: 伸手党可以直接戳这里下载就行:https://download.csdn.net/download/sloafer/11013205 下面直接上正确的修改代码,说的多了容易头晕。 原有的两行:
$tmp = imagecreatetruecolor($newwidth,$newheight);//创建新画布
imagecopyresampled($tmp,$image,0,0,0,0,$newwidth,$newheight,$width,$height); //处理图片到新尺寸
修改后的效果如下:
$tmp = imagecreatetruecolor($newwidth,$newheight);
/* --- 用以处理缩放gif和png图透明背景变黑色问题 开始 --- */
$color = imagecolorallocatealpha($tmp,0, 0, 0, 127);
imagecolortransparent($tmp,$color);
imagefill($tmp,0,0,$color);
/* --- 用以处理缩放gif和png图透明背景变黑色问题 结束 --- */
imagecopyresampled($tmp,$image,0,0,0,0,$newwidth,$newheight,$width,$height);
imagesavealpha($tmp, true);//注意这里还有一句!!!
高潮来了!!在网上找到的都是这些教程!!,我按照位置放上去了,竟然没用!!黑色背景是消失了,但是生成的又是白色背景的图标,仍然不是透明的!! 后来才发现下面还有一个函数: imagejpeg($tmp,$directory.$filename,100)
这个是生成jpeg的怎么可能会透明!! 所以改成了: imagepng($tmp,$directory.$filename,100)
TNND竟然直接报错!! imagepng(): gd-png: fatal libpng error: Incompatible libpng version in application and library
原因:JPEG图像生成的图像的质量的是一个范围从0(最低质量,最小的文件大小)到100(最高质量,最大文件大小)。
而出现这一错误的原因是因为ImagePNG生成图像的质量范围从0到9的,传入的这个范围以外的参数则该函数不会工作。
所以,简单地将值更改为0到9之间,错误会自行消失。 最终将此函数改为如下即可正常生成背景透明的ICO图标了 imagepng($tmp,$directory.$filename,9)
花了我整整一个上午的时间。需要的请拿走!
|