【邂逅BUG】从imagecreatefromX图片创建函数引起的BUG的排查经验

来源:互联网 发布:在哪里可以买淘宝号 编辑:程序博客网 时间:2024/05/16 18:34

问题


公司的网站项目为了做到自动发布,需要给项目搬个家,换到了另一台服务器,但由于是LAMP环境没有配置好,导致一些问题。
比如今早遇到的这个问题,登录网站在会员中心上传名片(使用了jQuery Jcrop裁剪插件),提示“Call to undefined function imagecreatefrom()”。

解决思路


由于笔者对图形处理函数不是太熟,百度了一把,发现实际上是不存在这样一个函数imagecreatefrom()的,而只有这样四个函数imagecreatefromjpeg,imagecreatefrompng,imagecreatefromgif,imagecreatefrombmp,通常用在截图时需要创建个新尺寸的图片。立马想到在程序里肯定进行了函数名拼装,而拼装的是图片文件类型,进而找到了getimagesize($img)是这个函数没有获取到图片属性信息,再检查图片路径,发现路径是正常的,但在浏览器中访问不到,由此判断图片应该是没有上传成功,最终找到file图片文件夹没有写权限的原因。将file文件夹赋予写权限得到完美解决。

附截图程序代码:
private function _resize($img,$width=360,$height=240)    {        $temp = array(1=>'gif', 2=>'jpeg', 3=>'png');        $targ_w = $width;        $targ_h = $height;        $jpeg_quality = 90;        list($ow, $oh, $tmp) = getimagesize($img);        $tmp = $temp[$tmp];        $infunc = "imagecreatefrom$tmp";        $outfunc = "image$tmp";        $img_r = $infunc($img);        $dst_r = ImageCreateTrueColor( $targ_w, $targ_h );        imagealphablending($dst_r,false); //重要 直接用$dst_r图像颜色替换,包括透明色        imagesavealpha($dst_r,true);  //重要 不要丢失$dst_r图像的透明色        if($_POST['w']==0||$_POST['h']==0){            imagecopyresampled($dst_r,$img_r,0,0,$_POST['x'],$_POST['y'],$targ_w,$targ_h,$ow,$oh);        }else{            imagecopyresampled($dst_r,$img_r,0,0,$_POST['x'],$_POST['y'],$targ_w,$targ_h,$_POST['w'],$_POST['h']);        }        $outfunc($dst_r,$img);        //return $img;    }

补习知识点


imagecreatefromjpeg($img)    //由jpg文件或jpg URL 创建一个新图象
imagecreatefrompng($img)     //由png文件或png URL 创建一个新图象
imagecreatefromgif($img)        //由gif文件或gif URL 创建一个新图象
imagecreatefrombmp($img)    //由bmp文件或bmp URL 创建一个新图象

getimagesize($img)                  //获取图片宽高、类型信息函数
返回数据如下:
Array(    [0] => 156    [1] => 45    [2] => 3      //1表示gif, 2表示jpeg, 3表示png    [3] => width="156" height="45"    [bits] => 8    [mime] => image/png)




0 0
原创粉丝点击