>백엔드 개발 >PHP 튜토리얼 >동일한 비율로 사진 크기를 조정하기 위해 사진을 업로드하는 PHP 코드

동일한 비율로 사진 크기를 조정하기 위해 사진을 업로드하는 PHP 코드

WBOY
WBOY원래의
2016-07-25 08:51:481002검색
  1. /**

  2. *
  3. * @author zhao jinhan
  4. * @date 2014년 1월 13일 11:54:30
  5. * @email xb_zjh@126.com
  6. *
  7. */
  8. header('콘텐츠 유형:텍스트/html ; 문자세트=utf-8');
  9. //정의된 크기
  10. define('THUMB_WIDTH',300);
  11. define('THUMB_HEIGHT',300);
  12. /**
  13. * 업로드된 파일명 재생성
  14. * @return string
  15. * @author zhao jinhan
  16. *
  17. */
  18. function _file_type($filetype = null){
  19. switch($filetype)
  20. {
  21. case "image/jpeg":
  22. $fileextname = "jpg";
  23. 휴식;
  24. case "image/gif":
  25. $fileextname = "gif";
  26. 휴식;
  27. case "image/png":
  28. $fileextname = "png";
  29. 휴식;
  30. 기본값:
  31. $fileextname = false;
  32. 휴식;
  33. }
  34. return $fileextname?date('YmdHis',time()).'.'.$fileextname:false;
  35. }
  36. /**
  37. *
  38. * @param string $filename
  39. * @param string $width
  40. * @param string $height
  41. * @param string $quality
  42. * @param string $savepath
  43. * @return 부울
  44. */
  45. 함수 _make_thumb($filename='', $width=THUMB_WIDTH, $height=THUMB_HEIGHT, $savepath='./upload'){
  46. if(file_exists($filename)){
  47. //상위 이미지 크기
  48. $imagesize=getimagesize($filename);
  49. $imagewidth=$imagesize[0];
  50. $imageheight=$imagesize[1];
  51. $mime = $imagesize['mime'];
  52. //宽高比例
  53. $ratio = $imagewidth/$imageheight;
  54. //새로운建一个背景이미지
  55. $bgimg = imagecreatetruecolor($width, $height);
  56. $white = imagecolorallocate($bgimg, 255, 255, 255);
  57. //填充背景color为白color
  58. imagefill($bgimg,0,0,$white);
  59. if($mime == 'image/gif'){
  60. $im = @imagecreatefromgif($filename); /* 열기 시도 */
  61. $outfun = 'imagegif';
  62. }elseif($mime == 'image/png'){
  63. $im = @imagecreatefrompng($filename); /* 열기 시도 */
  64. $outfun = 'imagepng';
  65. }else{
  66. $im = @imagecreatefromjpeg($filename); /* 열기 시도 */
  67. $outfun = 'imagejpeg';
  68. }
  69. if($ratio > 1){
  70. //宽島较大
  71. if($imagewidth > $width){
  72. //缩放图文到背景图文上
  73. $new_width = $너비;
  74. $new_height = ($width*$imageheight)/$imagewidth;
  75. $bg_y = ceil(abs(($height-$new_height)/2));
  76. imagecopyresampled($bgimg, $im, 0, $bg_y, 0, 0, $new_width, $new_height, $imagewidth, $imageheight);
  77. }else{
  78. //复复复图文到背景图文上
  79. $copy = true;
  80. }
  81. }else{
  82. //고도 높이
  83. if($imageheight > $height){
  84. //缩放图文
  85. $new_height = $height;
  86. $new_width = ($height*$imagewidth)/$imageheight;
  87. $bg_x = ceil(($width-$new_width)/2);
  88. imagecopyresampled($bgimg, $im, $bg_x, 0, 0, 0, $new_width, $new_height, $imagewidth, $imageheight);
  89. }else{
  90. //复复复图文到背景图文上
  91. $copy = true;
  92. }
  93. }
  94. if($copy){
  95. //复主图文到背景图文上
  96. $bg_x = ceil(($width-$imagewidth)/2);
  97. $bg_y = ceil(($height-$imageheight)/2);
  98. imagecopy($bgimg, $im, $bg_x, $bg_y, 0, 0, $imagewidth, $imageheight);
  99. }
  100. $ext = _file_type($mime);
  101. $outfun($bgimg, $savepath.'/'.$ext);
  102. imagedestroy($bgimg);
  103. $savepath.'/'.$ext를 반환합니다.
  104. }else{
  105. false를 반환합니다.
  106. }
  107. }
  108. if($_POST){
  109. $size = $_POST['size']?strtoupper(trim($_POST['size'])):'2M';
  110. $imgsize = $_FILES['img']['크기']?$_FILES['img']['크기']/(1024*1024):0;
  111. $imgwidth = $imgheight = $_POST['너비-높이']?intval($_POST['너비-높이']):300;
  112. //자정결정义文件上传大小
  113. ini_set('upload_max_filesize',$size);
  114. $mathsize = str_replace('M','',$size);
  115. if($imgsize>$mathsize){
  116. echo "图文大小不得超过{$size}!";
  117. 반환;
  118. }
  119. if($file_name = _file_type($_FILES['img']['type'])){
  120. if($_FILES['img']['error'] == UPLOAD_ERR_OK) {
  121. $savepath = '업로드/';
  122. if(!is_dir($savepath)){
  123. mkdir($savepath,0644);
  124. }
  125. //生成缩略图
  126. $thumb_file = _make_thumb($_FILES['img']['tmp_name'], $imgwidth, $imgheight, $savepath);
  127. //move_uploaded_file($_FILES['img']['tmp_name'],$savepath.$file_name);
  128. echo "生成后的图文为:";
  129. }else{
  130. echo $_FILES['img']['error'];
  131. 반환;
  132. }
  133. }else{
  134. echo "图文格式不正确,请上传jpg,gif,png적格式!";
  135. 반환;
  136. }

  137. }else{

  138. echo << ;head>
  139. 이미지를 확대하여 정사각형으로 저장하세요< /title> </li> <li></head> </li> <li><form action="" method="POST" enctype="multipart/form-data"> ; </li> <li><label>사진 업로드:</label> </li> <li><input type="file" name="img" /> </li> <li></div> ; </li> <li><label> 썸네일의 너비와 높이를 생성합니다(px): </label><input type="text" name="width-height" value="300"></div> </li> <li><div> </li> <li><label>최대 파일 크기:</label><input type="text" name="size" ="2M" /> </li> <li></div> </li> <li><div><input type="submit" name="submit" value="Submit" <li></ form> </li> <li></body> </li> <li>EOT; </li> <li>}</p></li> <li> <li> <li>코드 복사 </li> <li> <li> <li> <li> <li> </li> <li> </li> </ol> </div> <em onclick="copycode($('code_I5h'));"></em> </div> </td></tr></table></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>성명:</span><div>본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.</div></div></div><div class="nphpSytBox"><span>이전 기사:<a class="dBlack" title="PHP gd 라이브러리는 이미지 크기 자르기 및 크기 조정을 구현합니다." href="https://m.php.cn/ko/faq/315013.html">PHP gd 라이브러리는 이미지 크기 자르기 및 크기 조정을 구현합니다.</a></span><span>다음 기사:<a class="dBlack" title="PHP gd 라이브러리는 이미지 크기 자르기 및 크기 조정을 구현합니다." href="https://m.php.cn/ko/faq/315015.html">PHP gd 라이브러리는 이미지 크기 자르기 및 크기 조정을 구현합니다.</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>관련 기사</h2><em><a href="https://m.php.cn/ko/article.html" class="bBlack"><i>더보기</i><b></b></a></em><div class="clear"></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-6t+ed+2i-1n-4w" data-ad-client="ca-pub-5902227090019525" data-ad-slot="8966999616"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><ul class="nphpXgwzList"><li><b></b><a href="https://m.php.cn/ko/faq/1.html" title="cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법" class="aBlack">cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ko/faq/1.html" title="cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법" class="aBlack">cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ko/faq/1.html" title="cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법" class="aBlack">cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ko/faq/1.html" title="cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법" class="aBlack">cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ko/faq/2.html" title="정규식의 모든 표현식 기호(요약)" class="aBlack">정규식의 모든 표현식 기호(요약)</a><div class="clear"></div></li></ul></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="5027754603"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!</p></div><div class="footermid"><a href="https://m.php.cn/ko/about/us.html">회사 소개</a><a href="https://m.php.cn/ko/about/disclaimer.html">부인 성명</a><a href="https://m.php.cn/ko/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body><!-- Matomo --><script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="https://tongji.php.cn/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '9']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script><!-- End Matomo Code --></html>