ThinkPHP5.0 图片上传生成缩略图实例代码说明
author:一佰互联 2019-04-25   click:137

很多朋友遇到这样一个问题,图片上传生成缩略图,很多人在本机(win)测试成功,上传到linux 服务器后错误。

我也遇到同样的问题。网上一查,有无数的人说是服务器临时文件目录权限问题。

几经思考后,发现并非如此。

其根本的原因是,保存到变量的信息是之前的,之后又move移动到了自己指定的目录下,同时临时文件已经不存在。所以再生成缩略图的时候,需要open的,文件地址应该是自己定义的目录+文件名。然而很多实例文档中,还是使用的move 之前的信息。

又加之在win服务器下,move后,指定目录已生成了文件,同时临时文件未被删除。所以能用move之前的信息生成缩略图。

希望不多的言语能帮助遇到同样问题的你。

下面在通过实例代码给大家介绍ThinkPHP5.0 图片上传生成缩略图的方法。

代码如下所示:

<?phpnamespace appcommoncontroller;use appcommonmodelGoods;class Tools{ public static function upload_goods_img($whereName="", $width="", $height="") { // 打开图片的相对路径 $imgpath = config("img_path"); // 绝对路径 $imgRootPath = config("imgRootPath"); $storeId = "自定义"; $merchantId = "自定义"; $old_filename = $storeId . $merchantId . time(); $filename = $storeId . $merchantId . time() . mt_rand(1000, 9999); $type = Goods::upload($whereName, $old_filename); if($type)  {  $savepath = $imgRootPath . "/" . $whereName . "/" . $filename . "." . $type;  $thumbfile = $filename . "." . $type;  $thumbName = $imgpath . "/" . $whereName . "/" . $thumbfile;  $image = 	hinkImage::open($imgpath . "/". $whereName ."/" . $old_filename . "." . $type);  $image->thumb($width, $height, 	hinkImage::THUMB_FIXED)->save($thumbName);  $data = [  "access_url" => $imgRootPath . "/" . $whereName . "/" . $filename . "." . $type,  "filename" => $thumbfile,  ];  return $data; } } }

调用:

class Goods{ public function upload_sku() { $whereName = "goods/sku"; $width = 750; $height = 750; $data = Tools::upload_goods_img($whereName,$width, $height); return returnJson(1, "上传成功", $data);; }}

PS:下面在看一段代码tp5中上传图片方法,并生成相应缩略图的方法

//接收上传文件的name$file = $this->_req->file("upload_head_image");//将上传的文件移动到public/uploads/user$info = $file->validate(["size"=>5242880,"ext"=>"jpg,jpeg,png"])->move(ROOT_PATH . "public" . DS . "uploads" . DS . "user");if($info){ $pic = new apphomemodelUser(); $pic_url = $pic->thumbImage($file,$info); $user["portrait"] = "uploads/user/".$pic_url; //print_r($pic_url);exit(); }///model中代码如下 /** * [生成用户头像缩略图,180、50] * @param [type] $file [获取上传文件$_FILE] * @param [type] $pic [上传文件的路径] * @return [type] [返回处理后的文件路径] */ public function thumbImage($file,$pic){ $image = 	hinkImage::open($file); $getSaveName = str_replace("\","/",$pic->getSaveName());$portrait_thumbnail_180= "uploads/user/".str_replace($pic->getFilename(),"180_".$pic->getFilename(),$getSaveName);$image->thumb(180,180,	hinkImage::THUMB_CENTER)->save(ROOT_PATH . "public" . DS . $portrait_thumbnail_180,null,100,true); $portrait_thumbnail_80 = "uploads/user/".str_replace($pic->getFilename(),"80_".$pic->getFilename(),$getSaveName); $image->thumb(80,80,	hinkImage::THUMB_CENTER)->save(ROOT_PATH . "public" . DS . $portrait_thumbnail_80,null,100,true); $portrait_thumbnail_50 = "uploads/user/".str_replace($pic->getFilename(),"50_".$pic->getFilename(),$getSaveName); $image->thumb(50,50,	hinkImage::THUMB_CENTER)->save(ROOT_PATH . "public" . DS . $portrait_thumbnail_50,null,100,true);if ($image) {  return $getSaveName; } }

总结

以上所述是小编给大家介绍的ThinkPHP5.0 图片上传生成缩略图实例代码说明,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网页设计网站的支持!