Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 利用坐标裁剪图像_Javascript_Jquery_Html - Fatal编程技术网

Javascript 利用坐标裁剪图像

Javascript 利用坐标裁剪图像,javascript,jquery,html,Javascript,Jquery,Html,我正在尝试裁剪图像并将裁剪后的数据发送到服务器端。我正在使用imgareaselect插件。我得到了选择的坐标,但无法裁剪图像。互联网上所有可用的解决方案都是使用css预览裁剪后的图像。但是我怎样才能得到裁剪后的数据呢?不需要预览裁剪后的图像。我的代码是 cropw = $('#cropimg').imgAreaSelect({ maxWidth: 300, maxHeight: 300, aspectRatio: '1:1',

我正在尝试裁剪图像并将裁剪后的数据发送到服务器端。我正在使用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;
    }
});

您是否尝试过在Jquery中使用裁剪插件,例如:

您必须在页面中导入脚本:

    <?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>

$(函数(){
$('#cropbox').Jcrop({
方面:1,
onSelect:updateWord
});
});
函数updateCoords(c)
{
$('#x').val(c.x);
$('y').val(c.y);
$('w').val(c.w);
$('h').val(c.h);
};
函数checkCoords()
{
if(parseInt($('#w').val())返回true;
警报(“Selecione aárea para recorte.”);
返回false;
};
Crop jQuery

Hey@Shahbaz我正在尝试使用crapper.js为您提供解决方案

这就是你能做的

//链接js文件
//可选的
身体

<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(){
        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>

函数readURL(输入){
if(input.files&&input.files[0]){
var reader=new FileReader();
reader.onload=函数(e){
$('#blah').attr('src',e.target.result)
};
reader.readAsDataURL(input.files[0]);
setTimeout(initcrapper,1000);
}
}
函数initcrapper(){
var image=document.getElementById('blah');
变量裁剪器=新裁剪器(图像{
方面:1/1,
作物:功能(e){
控制台日志(e.detail.x);
控制台日志(e.detail.y);
}
});
//单击“裁剪”按钮
document.getElementById('crop_按钮')。addEventListener('click',function(){
var imgurl=crapper.getcrappedcanvas().toDataURL();
var img=document.createElement(“img”);
img.src=imgurl;
document.getElementById(“裁剪结果”).appendChild(img);
/*------------将映像发送到服务器-------------------------
cropper.getCroppedCanvas().toBlob(函数(blob){
var formData=new formData();
append('crappedimage',blob);
//使用`jQuery.ajax`方法
$.ajax(“/path/to/upload”{
方法:“张贴”,
数据:formData,
processData:false,
contentType:false,
成功:函数(){
console.log(“上传成功”);
},
错误:函数(){
log('Upload error');
}
});
});
----------------------------------------------------*/
})
}

希望这有帮助。谢谢。

根据已接受的答案添加了此选项,以防有人使用jquery包装器进行裁剪

让icopper=(函数($){
让$cropperCanvasImage=$(“#裁剪画布图像”);
返回{
readUrl,
cropImage
}
函数readUrl(输入){
if(input.files&&input.files[0]){
let reader=new FileReader();
reader.onload=函数(e){
$cropperCanvasImage.attr('src',e.target.result)
};
reader.readAsDataURL(input.files[0]);
setTimeout(initcrapper,1000);
}
}
函数initcrapper(){
$cropperCanvasImage.cropper({
方面:1/1
});
}
函数cropImage(){
让imgUrl=$cropperCanvasImage.data('cropper').getCroppedCanvas().toDataURL();
设img=document.createElement(“img”);
img.src=imgUrl;
$(“#裁剪结果”).append(img);
}
})(jQuery)


!函数(e,r){“对象”==typeof exports&&“undefined”!=typeof module?r(require(“jquery”)、require(“croperjs”):“函数”==typeof define&&define.amd?define([“jquery”、“croperjs”]、r):r(e.jquery,e.croper)}(此函数(c,s){“使用严格的”;if(c=c&&c.hasOwnProperty(“默认”)?c.default”):c,s=s&&s.hasOwnProperty(“默认”)?s.hasOwnProperty”)?s{var e=c.fn.crapper,d=“crapper”;c.fn.crapper=function(p){for(var e=arguments.length,a=Array(1我曾经遇到过同样的问题,我使用了Cropper.js,它很简单,而且有很好的文档记录。。然后通过这个来上传它-它们的回调看起来是一样的。如果你实现了这个,请给我提供代码。这里我得到的是base64图像字符串。你可以使用我的插件。它将在后台设置图像,而不是设置所需的高度和宽度hyour UPDATECORDS函数用于获取坐标。我正在查找裁剪的数据。要获取坐标并使用JCrop裁剪图像…请查看JCrop的文档,我想这会对您有所帮助,我可以从何处获取数据?您定义的函数返回了一些东西???您是对的,让我们放置完整的核心。我将PHP中的mple,与文档类似,但可用于任何语言。我希望它对您有用。Sergio@我的问题是获取裁剪后的数据并发送到服务器。而不是服务器端裁剪。假设我只想使用300 x 300这样的小图像作为配置文件图片。那么这是将整个图像发送到服务器的好方法吗?谢谢@Siddha这是有效的。我已经对你的答案投了赞成票。但我仍然想
<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(){
        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>