设为首页 收藏本站
查看: 767|回复: 0

[经验分享] PHP生成高质量的缩略图

[复制链接]
发表于 2017-4-3 14:42:49 | 显示全部楼层 |阅读模式
/**
   * 生成高质量的缩略图函数
   *
   * @param 原图片地址 $img_tempname
   * @param 缩略图最大宽度   $max_width
   * @param 生成缩略图地址   $dst_url
   * @return unknown
   */
public function createDstImage($img_tempname,$max_width,$dst_url)
{
   global $uploadpath,$id,$uploadtype;
  
   if (!file_exists($img_tempname))
   {
die('抱歉,您要上传的图片不存在!');
   }
   $img_src=file_get_contents($img_tempname);
   $image=imagecreatefromstring($img_src);//用该方法获得图象,可以避免“图片格式”的问题
   $width=imagesx($image);//取得图像宽度
   $height=imagesy($image);//取得图像高度
   $x_ratio=$max_width/$width;//宽度的比例
  
   if ($width<=$max_width)
   {
$tn_width=$width;
$tn_height=$height;
   }
   else
   {
$tn_width=$max_width;
$tn_height=round($x_ratio*$height);
   }
  
   if (function_exists('imagecreatetruecolor')&&(function_exists('imagecopyresampled')))
   {
/*生成高质量的缩略图方法*/
$dst=imagecreatetruecolor($tn_width,$tn_height);//新建一个真彩色图象
imagecopyresampled($dst,$image,0,0,0,0,$tn_width,$tn_height,$width,$height);//重采样拷贝部分图像并调整大小
   } else {
$dst=imagecreate($tn_width,$tn_height);
imagecopyresized($dst,$image,0,0,0,0,$tn_width,$tn_height,$width,$height);
   }
  
imagejpeg($dst,$dst_url,100);//以JPEG格式将图像输出到浏览器或文件,100(最佳质量,文件最大)。默认为IJG默认的质量值(大约75)
   imagedestroy($image);
   imagedestroy($dst);
  
   if (!file_exists($dst_url))
   {
return false;
   } else {
return basename($dst_url);
   }
}

/**
   * 函数功能:上传图片
   *
   * @param 图片实际文件名       $imgname
   * @param 图片临时文件名       $imgtmpname
   * @param 图片大小             $imgsize
   * @param 图片上传的目录    $uploadpath
   * @param course_id或unit_id     $id
   * @param 图片上传归属,比如course/或unit/   $uploadtype
   * @return 图片上传的信息
   */
public function uploadImage($imgname,$imgtmpname,$uploadpath,$id,$uploadtype)//上传图片函数
{
   $savepath=$uploadpath.'/'.$uploadtype.'/';
   $imgtypearray=array('gif','jpg','jpeg','png','bmp');
   $imgname=strtolower($imgname);//将文件名转换为小写
   $imgpathinfo=pathinfo($imgname);
   $extension=$imgpathinfo["extension"];
   $uploadimage=$savepath.$id.'_0.'.$extension;

   if (!in_array($extension,$imgtypearray))
   {
$text=implode(",",$imgtypearray);
echo "<center><font color=red>对不起,你上传的图片类型错误,只能上传".$text."格式的图片!</font><br/>";
echo "<a href='javascript:history.go(-1)'>返回继续上传</a></center>";
exit();
   }
  
   if ($_FILES['imgname']['error']>0)
   {
echo "<center><font color=red>错误</font>:<br/>";
switch ($_FILES['imgname']['error']>0)
{
case 1:
    return '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
case 2:
    return '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
case 3:
                return '文件只有部分被上传';
         case 4:
                return '没有文件被上传';
         case 5:
                return '未知错误!';
         case 6:
                return '找不到临时文件夹';
         case 7:
                return '文件写入失败';
         default:
                return '未知错误!';
}
   }
  
   /*生成所略图最大宽度为250,保存格式为$courseid_1.jpg*/
   $dst_url1=$savepath.'/'.$id.'_1.'.jpg;
   $this->createDstImage($imgtmpname,250,$dst_url1);
  
   /*生成所略图最大宽度为80,保存格式为$courseid_2.jpg*/
   $dst_url2=$savepath.'/'.$id.'_2.'.jpg;
   $this->createDstImage($imgtmpname,80,$dst_url2);
  
   /*生成所略图最大宽度为60,保存格式为$courseid_3.jpg*/
   $dst_url3=$savepath.'/'.$id.'_3.'.jpg;
   $this->createDstImage($imgtmpname,60,$dst_url3);
  
   /*上传原图片*/
   if (@is_uploaded_file($imgtmpname))
   {
if (@!move_uploaded_file($imgtmpname,$uploadimage))
{
echo "<center><font color=red>抱歉,图片上传失败!</font><br/>";
echo "<a href='javascript:history.go(-1)'>返回继续上传</a></center>";
return false;
} else {
echo "<center><font color=blue>恭喜您,图片上传成功!</font>";
return true;
}
   }
}
[/php]

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-359710-1-1.html 上篇帖子: PHP内核函数研究之 intval 下篇帖子: php 与 OAuth2 与 QQ login Testing.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表