php结合imgareaselect实现图片裁剪

前端技术 2023/08/31 JavaScript

引用CSS

/js/jquery.imgareaselect-0.9.10/css/imgareaselect-default.css 

引用js

/js/jquery.imgareaselect-0.9.10/scripts/jquery.imgareaselect.min.js 
/js/AjaxFileUploaderV2.1/ajaxfileupload.js

html

<div>
  <img src=\'blank.jpg\' id=\"mainimg\">
</div>
<div id=\"myPreview\" >
  <img src=\"blank.jpg\" id=\"mainimgthumb\" />
</div>
  <form name=\"fmCrop\">
    <input type=\"hidden\" name=\"src_path\" value=\"\" />
    <input type=\"hidden\" name=\"x1\" value=\"\" />
    <input type=\"hidden\" name=\"x2\" value=\"\" />
    <input type=\"hidden\" name=\"y1\" value=\"\" />
    <input type=\"hidden\" name=\"y2\" value=\"\" />
    <input type=\"submit\" name=\"btnSubmit\" class=\"baseinf_but1\" style=\"display:none\" value=\"确定\" />
  </form>

jQuery代码

$(\"#mainimg_src\", content).load(function () {
    crop($(\"#mainimg\", content));
   });

   function crop($img) { //$img是
             //缩小比例
             var scalex =$img.width() / $(\"#mainimg_src\").width();
             var scaley =$img.height() / $(\"#mainimg_src\").height();

             $img.imgAreaSelect({
               x1:0,y1:0,x2:150,y2:150,
               handles: true, aspectRatio: \'1:1\',
               onSelectEnd: function (img, selection) {
                 var scaleX = 100 / (selection.width || 1);
                 var scaleY = 100 / (selection.height || 1);

                 $(\'#mainimgthumb\').css({
                   width: Math.round(scaleX * 400) + \'px\',
                   height: Math.round(scaleY * 300) + \'px\',
                   marginLeft: \'-\' + Math.round(scaleX * selection.x1) + \'px\',
                   marginTop: \'-\' + Math.round(scaleY * selection.y1) + \'px\'
                 });
                 $(\'input[name=\"x1\"]\', content).val(selection.x1/scalex);
                 $(\'input[name=\"y1\"]\', content).val(selection.y1/scaley);
                 $(\'input[name=\"x2\"]\', content).val(selection.x2/scalex);
                 $(\'input[name=\"y2\"]\', content).val(selection.y2/scaley);
               }
             });
           }

确定裁剪

          //确定剪切
$(\"form[name=fmCrop]\", content).submit(function () {
  var data = $(\"form[name=fmCrop]\", content).serializeArray();
  $.get(\'/members/web-members-rest/crop.html\', data, function (r) {
    switch (r.result) {
       case \"Success\":
         jAlert(\"操作成功\");
         $(\"#left_mainimg\").attr(\"src\", \"/\" + r.path + \'?a=\' + (new Date()).format(\'yyyyMMddhhmmss\'));
         $(\"#myPreview\", content).css(\"display\", \"block\");
         $(\"#myPreview\", content).prev().css(\"display\", \"none\");
         $(\"#mainimg\", content).imgAreaSelect({ hide: true });
         $(\"form[name=fmUpload]\", content).css(\"display\", \"none\");
         $(\"input[name=btnSubmit]\", content).css(\"display\", \"none\");
         break;
        }
  });
  return false;
});

服务器端php代码

public function actionCrop($src_path,$x1,$x2,$y1,$y2){
    $pic =$src_path;

    $width = $x2-$x1;
    $height = $y2-$y1;

    $type=exif_imagetype($pic); //判断文件类型
    $support_type=array(IMAGETYPE_JPEG , IMAGETYPE_PNG , IMAGETYPE_GIF);
    if(!in_array($type, $support_type,true)) {
      echo \"this type of image does not support! only support jpg , gif or png\";
      exit();
    }
    switch($type) {
      case IMAGETYPE_JPEG :
        $image = imagecreatefromjpeg($pic);
        break;
      case IMAGETYPE_PNG :
        $image = imagecreatefrompng($pic);
        break;
      case IMAGETYPE_GIF :
        $image = imagecreatefromgif($pic);
        break;
      default:
        echo \"Load image error!\";
        exit();
    }

    $copy = $this->PIPHP_ImageCrop($image, $x1, $y1, $width, $height);//裁剪

    imagejpeg($copy, $src_path); //替换新图
    return [\'result\'=>\'Success\',\'path\'=>$src_path]; //返回新图地址
  }
  function PIPHP_ImageCrop($image, $x, $y, $w, $h){
    $tw = imagesx($image); 
    $th = imagesy($image); 

    if ($x > $tw || $y > $th || $w > $tw || $h > $th) return FALSE; 

    $temp = imagecreatetruecolor($w, $h); 
    imagecopyresampled($temp, $image, 0, 0, $x, $y, $w, $h, $w, $h); 
    return $temp; 
  }

以上所述就是本文的全部内容了,希望大家能够喜欢。

本文地址:https://www.stayed.cn/item/1060

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。