第一步在配置文件中设置图片的大小和路径

return array(
//'配置项'=>'配置值'
'img_save'=>[
'size' =>[
'app_gszc_Card'=>[
'compress'=>array(
'w'=> 720,
'h'=> 520
),
'page_size'=>array(
'w'=> 720,
'h'=> 520
),
], ],
'save_path'=>[
'app_gszc_Card' => array(
'origin' => './Uploads/gszc_card/origin/',
'page_size' => './Uploads/gszc_card/page_size/',
)
]
]
);

二.上传图片类文件

<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2017-4-27 0027
* Time: 10:49
*/
namespace Gszc\Event; use \Think\Image;
use \Think\Upload;
class ImgEvent
{ private $THINK_IMAGE = null;
private $THINK_UPLOAD = null; public function __construct()
{
$this->THINK_IMAGE = new Image();
$this->THINK_UPLOAD = new Upload();
} /*
* 保存base64文件
* $img string base64类型的文件
* $type string 保存的文件类型
* app_user_head_img 用户头像
*
*
*/
public function saveImg_base64($img = null , $type = null)
{
//获取保存图片配置
$imgConfig_savePath = C("img_save.save_path");
$imgConfig_size = C("img_save.size");
$saveFlag = false;
// dump($imgConfig_savePath[$type]);
// dump($imgConfig_size); if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $img, $result) && $imgConfig_savePath[$type])
{ $img_ext = $result[2]; //图片后缀
$img_header = $result[1];//图片头信息
$new_file_name = date('Ymd').'/'.uniqid().'.'.$img_ext;
$origin_img_path = '';//原图的保存路径
$origin_img_save_flag = true;//
foreach($imgConfig_savePath[$type] as $k => $v)
{ if(!is_dir($v.date('Ymd')))
{
mkdir($v.date('Ymd'),0777,true);
} if ($k == 'origin')
{
//先保存一份原图,然后其他尺寸的保存直接调用原图路径origin_img_path.
$origin_res = file_put_contents($v.$new_file_name, base64_decode(str_replace($img_header, '', $img)));
if (!$origin_res)
{
$origin_img_save_flag = false;
break;
}
else
{
$saveFlag = $new_file_name;
$origin_img_path = $v.$new_file_name;
$this->THINK_IMAGE->open($origin_img_path);
}
}
else
{
if ($origin_img_save_flag)
{
$width = $imgConfig_size[$type][$k]['w'];
$height = $imgConfig_size[$type][$k]['h'];
$this->THINK_IMAGE->thumb($width, $height,3)->save($v.$new_file_name);
} }
} }
return $saveFlag;
} /*
* 保存file类型文件
*
*/
public function saveImg_file($img = null , $type = null)
{ //获取保存图片配置
$imgConfig_savePath = C("img_save.save_path");
$imgConfig_size = C("img_save.size");
$saveFlag = false; if ($img && $imgConfig_savePath[$type])
{ $origin_img_save_flag = true;
foreach($imgConfig_savePath[$type] as $k => $v)
{ if(!is_dir($v.date('Ymd')))
{
mkdir($v.date('Ymd'),0777,true);
} if ($k == 'origin')
{
$this->THINK_UPLOAD->rootPath = $v;
$this->THINK_UPLOAD->subName = date('Ymd');
$this->THINK_UPLOAD->saveName = array('uniqid','');
$saveRes = $this->THINK_UPLOAD->uploadOne($img);
if (!$saveRes)
{
$origin_img_save_flag = false;
}
else
{
$saveFlag = true;
$origin_img_path = $v.$saveRes['savepath'].$saveRes['savename'];
$this->THINK_IMAGE->open($origin_img_path);
$fileName = $saveRes['savepath'].$saveRes['savename'];
}
}
else
{
if ($origin_img_save_flag)
{
$width = $imgConfig_size[$type][$k]['w'];
$height = $imgConfig_size[$type][$k]['h'];
$saveFlag = $this->THINK_IMAGE->thumb($width, $height,3)->save($v.$fileName); if (!$saveFlag)
{
$saveFlag = false;
$origin_img_save_flag = false;
} }
} } if($saveFlag)
{
$saveFlag = $fileName;
} }
return $saveFlag;
} /*
* 保存file类型文件,多文件
*
*/
public function saveImgs_files($imgs = null , $type = null)
{ //获取保存图片配置s
$imgConfig_savePath = C("img_save.save_path");
$imgConfig_size = C("img_save.size");
$saveFlag = false;
$imgResArr = array();//保存图片路径
$origin_img_path = array();//原图路径 if ($imgs && $imgConfig_savePath[$type])
{ $origin_img_save_flag = true;
foreach($imgConfig_savePath[$type] as $k => $v)
{ if(!is_dir($v.date('Ymd')))
{
mkdir($v.date('Ymd'),0777,true);
} if ($k == 'origin')
{
$this->THINK_UPLOAD->rootPath = $v;
$this->THINK_UPLOAD->subName = date('Ymd');
$this->THINK_UPLOAD->saveName = array('uniqid','');
$saveRes = $this->THINK_UPLOAD->upload($imgs); if ($saveRes)
{
$saveFlag = true;
foreach ($saveRes as $srK => $srV)
{
$origin_img_path[] = $v.$saveRes[$srK]['savepath'].$saveRes[$srK]['savename'];
$fileName = $saveRes[$srK]['savepath'].$saveRes[$srK]['savename'];
$imgResArr[] = $fileName;
} }
}
else
{
foreach($origin_img_path as $oipK => $oipV)
{
if ($saveFlag)
{
$width = $imgConfig_size[$type][$k]['w'];
$height = $imgConfig_size[$type][$k]['h'];
$this->THINK_IMAGE->open($oipV);
$saveThumb = $this->THINK_IMAGE->thumb($width, $height,3)->save($v.$imgResArr[$oipK]);
if (!$saveThumb)
{
$saveFlag = false;
break;
}
}
} } } if ($saveFlag)
{
$saveFlag = $imgResArr;
}
}
return $saveFlag;
} /*
* 保存微信头像 - url
*
*/
public function save_WxImg($picUrl = '',$type = null)
{ $ch = curl_init($picUrl);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_NOBODY, 0); //对body进行输出。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$package = curl_exec($ch);
$httpInfo = curl_getinfo($ch);
curl_close($ch);
$media = array_merge(array('mediaBody' => $package), $httpInfo); //求出文件格式
preg_match('/\w\/(\w+)/i', $media["content_type"], $extmatches);
$fileExt = $extmatches[1]; $saveName = md5(microtime(true)).".{$fileExt}"; //获取保存图片配置
$imgConfig_savePath = C("img_save.save_path");
$imgConfig_size = C("img_save.size");
$saveFlag = false; if ($imgConfig_savePath[$type])
{ $origin_img_save_flag = true;
foreach($imgConfig_savePath[$type] as $k => $v)
{ if(!is_dir($v.date('Ymd')))
{
mkdir($v.date('Ymd'),0777,true);
} if ($k == 'origin')
{
file_put_contents($v.'/'.date('Ymd').'/'.$saveName,$media['mediaBody']); $origin_img_path = $v.'/'.date('Ymd').'/'.$saveName;
$this->THINK_IMAGE->open($origin_img_path);
$fileName = date('Ymd').'/'.$saveName;
}
else
{
if ($origin_img_save_flag)
{
$width = $imgConfig_size[$type][$k]['w'];
$height = $imgConfig_size[$type][$k]['h'];
$saveFlag = $this->THINK_IMAGE->thumb($width, $height,3)->save($v.$fileName); if (!$saveFlag)
{
$saveFlag = false;
$origin_img_save_flag = false;
}
else
{
$saveFlag = $fileName;
}
} }
}
}
return $saveFlag; } /*
* 保存file类型文件
*
*/
public function saveImg_Wx($WxImg = array() , $type = null)
{ //获取保存图片配置
$imgConfig_savePath = C("img_save.save_path");
$imgConfig_size = C("img_save.size");
$saveFlag = false;
$imgResArr = array(); if ($WxImg && $imgConfig_savePath[$type])
{ foreach ($WxImg as $wiK => $wiV)
{ $wxImg = $this->getWxImg($wiV); $origin_img_save_flag = true;
foreach($imgConfig_savePath[$type] as $k => $v)
{ if(!is_dir($v.date('Ymd')))
{
mkdir($v.date('Ymd'),0777,true);
} if ($k == 'origin')
{
file_put_contents($v.'/'.date('Ymd').'/'.$wxImg['saveName'],$wxImg['imgMedia']['mediaBody']); $origin_img_path = $v.'/'.date('Ymd').'/'.$wxImg['saveName'];
$this->THINK_IMAGE->open($origin_img_path);
$fileName = date('Ymd').'/'.$wxImg['saveName'];
$imgResArr[] = $fileName;
}
else
{
if ($origin_img_save_flag)
{
$width = $imgConfig_size[$type][$k]['w'];
$height = $imgConfig_size[$type][$k]['h'];
$saveFlag = $this->THINK_IMAGE->thumb($width, $height,3)->save($v.$fileName); if (!$saveFlag)
{
$saveFlag = false;
$origin_img_save_flag = false;
}
else
{
$saveFlag = $fileName;
}
} }
}
} if($saveFlag)
{
$saveFlag = $imgResArr;
} }
return $saveFlag;
} /*
* 保存用户的推广图片
*/
public function save_userShareImg($bg_img_path = '' , $head_img_path = '' , $qrCode_img_path = '' , $saveFile = '' , $userName = '' , $userDscp = '' , $font_path = '')
{ //设置头像图片为圆角
$head_img_radius = $this->radius_img($head_img_path,240);
//合并到背景图中
$this->mergeImage($bg_img_path,$head_img_radius,$saveFile,array('left' => 200, 'top' => 55, 'width' => 480, 'height' => 480));
//设置名称
$this->writeText($saveFile, $saveFile, $userName,255,255,255,1010,32,$font_path, array());
//设置二维码内容
$this->mergeImage($saveFile,$qrCode_img_path,$saveFile,array('left' => 255, 'top' => 684, 'width' => 250, 'height' => 245)); return $saveFile;
} /*
* 合并图片
*/
private function mergeImage($bg_img, $main_img, $saveFile, $param)
{ extract($param);
// list($bgWidth, $bgHeight) = getimagesize($bg_img);
$bgImg = $this->imagecreate($bg_img);
if (!is_resource($main_img))
{
list($mainWidth, $mainHeight) = getimagesize($main_img);
$mainImg = $this->imagecreate($main_img);
}
else
{
$mainImg = $main_img; $mainWidth = $width;
$mainHeight = $height;
}
imagecopyresized($bgImg, $mainImg, $left, $top, 0, 0, $width, $height, $mainWidth, $mainHeight);
// imagecopyresized($bgImg, $mainImg, $left, $top, 0, 0, $width, $height, $width,$height);
ob_start();
// output jpeg (or any other chosen) format & quality
imagejpeg($bgImg, NULL, 100);
$contents = ob_get_contents();
ob_end_clean();
imagedestroy($bgImg);
imagedestroy($mainImg);
$fh = fopen($saveFile, "w+");
fwrite($fh, $contents);
fclose($fh);
} /*
* 图片写文字
* $bg_img 背景图片
* $saveFile 保存图片路径
* $text 文字
* $fontColor 字体颜色
* $top 图片距离顶端高度
* $fontSize 字体大小
* $font 字体路径
* $param 传递的参数
*/
private function writeText($bg_img, $saveFile, $text, $colorR,$colorG,$colorB , $top , $fontSize , $font , $param = array())
{
list($bgWidth, $bgHeight) = getimagesize($bg_img);
$im = imagecreatefromjpeg($bg_img); $fontColor = imagecolorallocate($im, $colorR, $colorG, $colorB);//字的RGB颜色
$str = mb_convert_encoding($text, "html-entities", "utf-8");;//解决乱码问题 $fontBox = imagettfbbox($fontSize, 0, $font, $str);//文字水平居中实质
$width = imagesx($im);
imagettftext($im, $fontSize, 0, ceil(($width - $fontBox[2]) / 2), $top, $fontColor, $font, $str); ob_start();
// output jpeg (or any other chosen) format & quality
imagejpeg($im, NULL, 100);
$contents = ob_get_contents();
ob_end_clean();
imagedestroy($im);
$fh = fopen($saveFile, "w+");
fwrite($fh, $contents);
fclose($fh);
} /**
* 处理圆角图片
* @param string $imgPath 源图片路径
* @param integer $radius 圆角半径长度默认为15,处理成圆型
* @return [type] [description]
*/
public function radius_img($imgPath = '', $radius = 65)
{
$ext = pathinfo($imgPath);
$src_img = null;
switch ($ext['extension']) {
case 'jpg':
$src_img = imagecreatefromjpeg($imgPath);
break;
case 'png':
$src_img = imagecreatefrompng($imgPath);
break;
default:
$src_img = imagecreatefromjpeg($imgPath);
break;
}
$wh = getimagesize($imgPath);
$w = $wh[0];
$h = $wh[1];
// $radius = $radius == 0 ? (min($w, $h) / 2) : $radius;
$img = imagecreatetruecolor($w, $h);
//这一句一定要有
imagesavealpha($img, true);
//拾取一个完全透明的颜色,最后一个参数127为全透明
$bg = imagecolorallocatealpha($img, 255, 255, 255, 127);
imagefill($img, 0, 0, $bg);
$r = $radius; //圆 角半径
for ($x = 0; $x < $w; $x++) {
for ($y = 0; $y < $h; $y++) {
$rgbColor = imagecolorat($src_img, $x, $y);
if (($x >= $radius && $x <= ($w - $radius)) || ($y >= $radius && $y <= ($h - $radius))) {
//不在四角的范围内,直接画
imagesetpixel($img, $x, $y, $rgbColor);
} else {
//在四角的范围内选择画
//上左
$y_x = $r; //圆心X坐标
$y_y = $r; //圆心Y坐标
if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
imagesetpixel($img, $x, $y, $rgbColor);
}
//上右
$y_x = $w - $r; //圆心X坐标
$y_y = $r; //圆心Y坐标
if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
imagesetpixel($img, $x, $y, $rgbColor);
}
//下左
$y_x = $r; //圆心X坐标
$y_y = $h - $r; //圆心Y坐标
if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
imagesetpixel($img, $x, $y, $rgbColor);
}
//下右
$y_x = $w - $r; //圆心X坐标
$y_y = $h - $r; //圆心Y坐标
if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
imagesetpixel($img, $x, $y, $rgbColor);
}
}
}
}
return $img;
} private function imagecreate($bg)
{
$bgImg = @imagecreatefromjpeg($bg);
if (FALSE == $bgImg) {
$bgImg = @imagecreatefrompng($bg);
}
if (FALSE == $bgImg) {
$bgImg = @imagecreatefromgif($bg);
}
return $bgImg;
} /*
* 下载微信服务器的图片
* media_id 微信的媒体id
* type 保存图片类型
* */
public function getWxImg($mediaId)
{
if(!class_exists('\JSSDK') && !class_exists('\WxPayConfig'))
{
vendor('wxsdkapi.jssdk');
vendor('wxpayapi.lib.WxPay#Config');
}
$res = new \JSSDK(C('WEIXINPAY_CONFIG.APPID'),C('WEIXINPAY_CONFIG.APPSECRET'));
$accessToken = $res->getAccessToken(); // $mediaId = 'cVqPIhDPPThUtayzS27GK6RN4-dseA6AZnTJxcg7_VaeuAaKcL53X32hmKxhgiSD';
// $accessToken = 'KHaopJY444kJ06LcH9ESj-73pkEfFTgIr3L45RURuUxv1KTjgXyFepJ-cTIF_oUyAKyYb5dK2r9L_wC-WDw2USqGQBMobC6DzPImuhPqxB8jxZ41CuLDtJiaEZk8Vf5kWSSjAAAAWW';
$picUrl = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=$accessToken&media_id=$mediaId"; $ch = curl_init($picUrl);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_NOBODY, 0); //对body进行输出。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$package = curl_exec($ch);
$httpInfo = curl_getinfo($ch);
curl_close($ch);
$media = array_merge(array('mediaBody' => $package), $httpInfo); //求出文件格式
preg_match('/\w\/(\w+)/i', $media["content_type"], $extmatches);
$fileExt = $extmatches[1]; $saveName = md5(microtime(true)).".{$fileExt}"; $img = array('imgMedia'=>$media,'saveName'=>$saveName); return $img;
}
/*
* 下载微信服务器的图片
* media_id 微信的媒体id
* type 保存图片类型
* */
public function getWxImg2($mediaId,$file)
{
if(!class_exists('\JSSDK') && !class_exists('\WxPayConfig'))
{
vendor('wxsdkapi.jssdk');
vendor('wxpayapi.lib.WxPay#Config');
}
$res = new \JSSDK(C('WEIXINPAY_CONFIG.APPID'),C('WEIXINPAY_CONFIG.APPSECRET'));
$accessToken = $res->getAccessToken();
$picUrl = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=$accessToken&media_id=$mediaId"; return httpcopy($picUrl,$file);
} }

三.调用方法 上传图片

    /**
* 上传图片
* @param varchar file 图片文件
* @httpmethod POST
* @response 响应数据
* {
* "ResultType": "1000",
* "Message": "上传成功",
* "AppendData": "图片路径",
* }
*/
public function UploadNavImg()
{
$imgEven = A('Gszc/Img','Event');
if(!empty($_FILES['file']['name'])){
$img=$imgEven->saveImg_file($_FILES['file'],'app_gszc_Card'); $this->array_return['errno']=self::__OK__;
$this->array_return['errmsg']='上传成功!';
$this->array_return['data']=$img;
$this->ajaxReturn($this->array_return);
}
$this->array_return['errno']=self::__ERROR__;
$this->array_return['errmsg']='没有上传文件!';
$this->array_return['data']=[];
$this->ajaxReturn($this->array_return); }

最新文章

  1. 配置和创建一个hibernate简单应用
  2. WPF自定义控件与样式(8)-ComboBox与自定义多选控件MultComboBox
  3. Spark入门实战系列--8.Spark MLlib(下)--机器学习库SparkMLlib实战
  4. git 教程(6)--管理修改
  5. python多线程ssh爆破
  6. HDOJ-三部曲一(搜索、数学)-1005-Dungeon Master
  7. 【BZOJ】【4011】【HNOI2015】落忆枫音
  8. POJ2126——Prime Path(BFS)
  9. C语言简短程序gcc编译过程
  10. [OC Foundation框架 - 10] NSDictionary
  11. JS验证用户真实姓名
  12. 有了screen,妈妈再也不用担心我的学习啦
  13. PAT (Advanced Level) 1070. Mooncake (25)
  14. 图论算法-网络最大流【EK;Dinic】
  15. Ajax 初步学习总结
  16. mysql error 2005 - Unknown MySQL server host &#39;localhost&#39;(11001)
  17. 金融量化分析【day112】:股票数据分析Tushare2
  18. Codeforces Round #489 (Div. 2) E. Nastya and King-Shamans(线段树)
  19. Java中运行时异常和非运行时异常什么鬼?
  20. MyEclipse启动时 弹出提醒框

热门文章

  1. 菜单Menu(AS开发实战第四章学习笔记)
  2. TCP协议 状态解析和状态统计
  3. Java Web高性能开发 - 前端高性能
  4. Django基础之Model操作
  5. 学习笔记:如何阻止Web应用存储敏感数据
  6. 关于Unity3d的Quaternion.LookRotation的学习
  7. Java学习---TCP Socket的学习
  8. Xposed模块开发基本方法记录
  9. Angular2 Pipe
  10. git回滚线上代码