一.需求

  最近公司的项目中有个需求,就是用户上传自己的微信二维码,然后系统会自动将用户的微信二维码合并到产品中

二.分析

  因为该系统是手机端的,所以从用户端的体验出发,用户当然是直接在微信上保存二维码然后上传。这里有个问题就是,

  微信的安卓版本与ios版本保存下来的图片尺寸是不一样的。所以为了更加谨慎的使用二维码,这里需要将上传的二维码

  进行转化为统一的规格。所以需要制作略缩图

三.过程

  我们可以使用php的GD库来处理,定义一个目标尺寸画布,然后将二维码拷贝布满画布,就是代码

  

/**
* 制作略缩图方法
* @param string $src 文件路径
* @param int $width 生成略缩图的宽度(只设置高度是则为等比例缩放)
* @param int $height 生成略缩图的高度(只设置宽度是则为等比例缩放)
* @param string $filename 生成略缩图图片保存路径
*/
function makeThumb($src, $width = null, $height = null, $filename)
{
$srcData = getimagesize($src);
list($srcWidth, $srcHeight, $srcType) = $srcData;
if (empty($width))
$width = $srcWidth * ($height / $srcHeight);
if (empty($height))
$height = $srcHeight * ($width / $srcWidth);
switch ($srcType) {
case '1':
$imgType = 'gif';
break;
case '2':
$imgType = 'jpeg';
break;
case '3':
$imgType = 'png';
break;
} $imageCreateFun = 'imagecreatefrom'.$imgType;
$srcImg = $imageCreateFun($src);
$destImg = imagecreatetruecolor(intval($width),intval($height));//创建目标尺寸的画布
imagecopyresampled($destImg, $srcImg,0,0,0,0,$width,$height,$srcWidth,$srcHeight);//将拷贝出二维码并铺满在画布中 $imagefunc = 'image'.$imgType; // header("content-type:image/jpeg;")
// imagejpeg($destImg);
$imagefunc($destImg,$filename.'.'.$imgType);
return $filename.'.'.$imgType;
} $codePath = '';
$codeImageType = '';
if ((($_FILES["file"]["type"] == "image/jpeg")||($_FILES["file"]["type"] == "image/jpg")||($_FILES["file"]["type"] == "image/png"))&& ($_FILES["file"]["size"] < 2097152))
{
if($_FILES["file"]["error"] > 0)
{
echo "发生错误" . $_FILES["file"]["error"] . ",请找TzSteady<br />";
exit;
}else
{
move_uploaded_file($_FILES["file"]["tmp_name"],"./code/" . date("Ymd").$_FILES["file"]["name"]);
$codePath = "./code/" . date("Ymd").$_FILES["file"]["name"];
$codePath = makeThumb($codePath,300,false,'./code/'.date("YmdHis"));
$codeImageType = $_FILES["file"]["type"];
}
}else
{
echo "<script>
alert('请上传小于2M的jpg/png/jpeg格式的二维码');
</script>";
exit;
}

最新文章

  1. Python正则表达式:最短匹配
  2. Atitit Immutability&#160;和final的优点
  3. BestCoder10 1002 Revenge of GCD(hdu 5019) 解题报告
  4. appium支持中文输入
  5. 《more effective C++》条款10 防止构造函数里的资源泄露
  6. .Net性能优化时应该关注的数据
  7. 使用CompletionService结合ExecutorService批处理任务
  8. Spring-----Spring整合Struts2实例
  9. 将json转化为model
  10. Cookie同域,跨域单点登录
  11. Micropython教程之TPYBoard制作蓝牙+红外循迹小车
  12. MySQL基础学习笔记
  13. Asp.Net Core 2.0 项目实战(6)Redis配置、封装帮助类RedisHelper及使用实例
  14. css自定义滚动条
  15. Ubuntu18 输入法fcitx安装
  16. 多线程安全单例模式学习代码 c++11
  17. JAVA连接数据库 #03# HikariCP
  18. pytorch如何能够保证模型的可重复性
  19. Java多线程之ReadWriteLock读写锁简介与使用教程
  20. JavaScript的格式--从格式做起,做最严谨的工程师

热门文章

  1. C# 获得枚举值中所有数据到Array(数组)中
  2. Web前端性能优化——提高页面加载速度
  3. 查询数据表行数 然后循环查找表 添加数据到ITEMS
  4. Android 双屏异显
  5. CAD在图纸保存的同时,也把基本信息保存了(网页版)
  6. mysql异地备份方案经验总结
  7. 玲珑杯1147 - 最后你还是AK了
  8. noip模拟赛 公交车
  9. 清北学堂模拟赛d5t5 exLCS
  10. 清北学堂模拟赛d7t6 拯救世界