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

问题


公司的网站项目为了做到自动发布,需要给项目搬个家,换到了另一台服务器,但由于是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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值