问题
公司的网站项目为了做到自动发布,需要给项目搬个家,换到了另一台服务器,但由于是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
)