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