2016-08-03 22 views
3

画像をトリミングして切り取ったデータをサーバー側に送信しようとしています。私はimgareaselectプラグインを使用しています。私は選択の座標を取得しますが、画像を切り抜くことはできませんでした。インターネット上で利用可能なすべてのソリューションは、CSSを使用してトリミング画像をプレビューすることです。しかし、私はどのようにトリミングされたデータを取得できますか?プレビューをトリミングする必要はありません。私のコードは座標を使用したクロップ画像

cropw = $('#cropimg').imgAreaSelect({ 
      maxWidth: 300, maxHeight: 300, 
      aspectRatio: '1:1', 
      instance: true, 
      handles: true, 
      onSelectEnd: function (img, selection) {     
      x1 = selection.x1; 
      y1 = selection.y1; 
      x2 = selection.x2; 
      y2 = selection.y2; 
    } 
}); 
+0

私は一度同じ問題を抱えていましたが、私はCropper.jsを使いました。 https://github.com/fengyuanchen/cropper。それからそれをアップロードするために行く - http://stackoverflow.com/questions/35068954/uploading-an-image-cropped-using-a-cropper-js-plugin –

+0

彼らのコールバックは同じように見えます。実装されている場合は、私にコードを提供してください。ここで私はbase64イメージ文字列を取得しています。 –

答えて

11

ねえ@ Shahbaz私はcropper.jsを使って解決策を試していました。

この

は、あなたが何ができるかである

Download cropper.js from here

//link the js files 
<head> 
    <script src="jquery.js"></script> // optional 
    <link href="cropper.min.css" rel="stylesheet"> 
    <script src="cropper.min.js"></script> 
</head> 

ボディ

<input type="file" name="image" id="image" onchange="readURL(this);"/> 
<div class="image_container"> 
    <img id="blah" src="#" alt="your image" /> 
</div> 
<div id="cropped_result"></div>  // Cropped image to display (only if u want) 
<button id="crop_button">Crop</button> // Will trigger crop event 

Javascriptを

<script type="text/javascript" defer> 
    function readURL(input) { 
     if (input.files && input.files[0]) { 
      var reader = new FileReader(); 
      reader.onload = function (e) { 
       $('#blah').attr('src', e.target.result) 
      }; 
      reader.readAsDataURL(input.files[0]); 
      setTimeout(initCropper, 1000); 
     } 
    } 
    function initCropper(){ 
     console.log("Came here") 
     var image = document.getElementById('blah'); 
     var cropper = new Cropper(image, { 
      aspectRatio: 1/1, 
      crop: function(e) { 
      console.log(e.detail.x); 
      console.log(e.detail.y); 
      } 
     }); 

     // On crop button clicked 
     document.getElementById('crop_button').addEventListener('click', function(){ 
      var imgurl = cropper.getCroppedCanvas().toDataURL(); 
      var img = document.createElement("img"); 
      img.src = imgurl; 
      document.getElementById("cropped_result").appendChild(img); 

      /* ---------------- SEND IMAGE TO THE SERVER------------------------- 

       cropper.getCroppedCanvas().toBlob(function (blob) { 
         var formData = new FormData(); 
         formData.append('croppedImage', blob); 
         // Use `jQuery.ajax` method 
         $.ajax('/path/to/upload', { 
         method: "POST", 
         data: formData, 
         processData: false, 
         contentType: false, 
         success: function() { 
          console.log('Upload success'); 
         }, 
         error: function() { 
          console.log('Upload error'); 
         } 
         }); 
       }); 
      ----------------------------------------------------*/ 
     }) 
    } 
</script> 

Heres the link to the example I just createdダウンロード>任意のサーバー(wamp、xampなど)で実行すると、CORSセキュリティエラーが発生します。

これが役に立ちます。ありがとう。

+0

ありがとう@Siddharthaそれは働いています。私はあなたの答えをupvotedしています。しかし、私は座標を使ってイメージをトリミングする方法を知りたいです。私はこれのために多くの方法を試したので。 –

0

であるあなたは次のように、jQueryのための作物のプラグインを使用してみてくださいました:

https://fengyuanchen.github.io/cropper/

あなたのページにスクリプトをインポートする必要があります。

<?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
    $targ_w = $targ_h = 150; 
    $jpeg_quality = 90; 

    $src = 'demo_files/pool.jpg'; 
    $img_r = imagecreatefromjpeg($src); 
    $dst_r = ImageCreateTrueColor($targ_w, $targ_h); 

    imagecopyresampled($dst_r,$img_r,0,0,$_POST['x'],$_POST['y'], 
    $targ_w,$targ_h,$_POST['w'],$_POST['h']); 

    header('Content-type: image/jpeg'); 
    imagejpeg($dst_r,null,$jpeg_quality); 

    exit; 
} 


?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 

     <script src="http://deepliquid.com/Jcrop/js/jquery.Jcrop.min.js"></script> 
     <script src="../js/jquery.Jcrop.js"></script> 
     <link rel="stylesheet" href="../css/jquery.Jcrop.css" type="text/css" /> 
     <link rel="stylesheet" href="demo_files/demos.css" type="text/css" /> 

     <script language="Javascript"> 

      $(function(){ 

       $('#cropbox').Jcrop({ 
        aspectRatio: 1, 
        onSelect: updateCoords 
       }); 

      }); 

      function updateCoords(c) 
      { 
       $('#x').val(c.x); 
       $('#y').val(c.y); 
       $('#w').val(c.w); 
       $('#h').val(c.h); 
      }; 

      function checkCoords() 
      { 
       if (parseInt($('#w').val())) return true; 
       alert('Selecione a área para recorte.'); 
       return false; 
      }; 

     </script> 

    </head> 

    <body> 

    <div id="outer"> 
    <div class="jcExample"> 
    <div class="article"> 

     <h1>Crop jQuery</h1> 


     <img src="demo_files/pool.jpg" id="cropbox" /> 


     <form action="crop.php" method="post" onsubmit="return checkCoords();"> 
      <input type="hidden" id="x" name="x" /> 
      <input type="hidden" id="y" name="y" /> 
      <input type="hidden" id="w" name="w" /> 
      <input type="hidden" id="h" name="h" /> 
      <input type="submit" value="Crop Image" /> 
     </form> 

    </div> 
    </div> 
    </div> 
    </body> 

</html> 
+0

あなたのupdateCoords関数は座標を取得するための関数です。私は切り取ったデータを探しています。 –

+0

座標を取得し、JCropを使用して画像をトリミングするには... JCropの文書を見て、私は –

+0

を助け、どこからデータを取得できるのでしょうか?あなたが定義した関数は何かを返すでしょうか? –

関連する問題