我正在使用 JCrop 来调整和裁剪图像。
我想添加一个功能,以便用户可以:
- 选择一个图像文件
- 使用 jcrop 进行编辑
- 无需更改页面即可上传
我可以单独做所有这些,但是当我混合这些时我会得到错误。
$('#target').attr('src', e.target.result);
$('#target2').attr('src', e.target.result);
现在的问题是,当我更改 id "target" 主图像的 src 位置时,它不会显示我的新图像。但是当我在 id "target2" 预览图像上执行此操作时,它会显示我的新图像并且我可以处理它。(但是当我按下裁剪时不会裁剪新图像)
<script src="jquery.min.js"></script>
<script src="jquery.Jcrop.js"></script>
<script>
function dudecmon(){
jQuery(function($){
// Create variables (in this scope) to hold the API and image size
var jcrop_api,
boundx,
boundy,
// Grab some information about the preview pane
$preview = $('#preview-pane'),
$pcnt = $('#preview-pane .preview-container'),
$pimg = $('#preview-pane .preview-container img'),
xsize = $pcnt.width(),
ysize = $pcnt.height();
console.log('init',[xsize,ysize]);
$('#target').Jcrop({
onChange: updatePreview,
onSelect: updatePreview,
onSelect: updateCoords,
aspectRatio: xsize / ysize
},function(){
// Use the API to get the real image size
var bounds = this.getBounds();
boundx = bounds[0];
boundy = bounds[1];
// Store the API in the jcrop_api variable
jcrop_api = this;
// Move the preview into the jcrop container for css positioning
$preview.appendTo(jcrop_api.ui.holder);
});
function updatePreview(c)
{
if (parseInt(c.w) > 0)
{
var rx = xsize / c.w;
var ry = ysize / c.h;
$pimg.css({
width: Math.round(rx * boundx) + 'px',
height: Math.round(ry * boundy) + 'px',
marginLeft: '-' + Math.round(rx * c.x) + 'px',
marginTop: '-' + Math.round(ry * c.y) + 'px'
});
}
};
});
};
</script>
<script>
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('Please select a crop region then press submit.');
return false;
};
</script>
<script>
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
//jcrop_api.setImage(e.target.result);
$('#target').attr('src', e.target.result);
$('#target2').attr('src', e.target.result);
};
reader.readAsDataURL(input.files[0]);
dudecmon();
}
}
</script>
<link rel="stylesheet" href="jquery.Jcrop.css" type="text/css" />
<style type="text/css">
/* Apply these styles only when #preview-pane has
been placed within the Jcrop widget */
.jcrop-holder #preview-pane {
display: block;
position: absolute;
z-index: 2000;
top: 10px;
right: -280px;
padding: 6px;
border: 1px rgba(0,0,0,.4) solid;
background-color: white;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
-webkit-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2);
box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2);
}
/* The Javascript code will set the aspect ratio of the crop
area based on the size of the thumbnail preview,
specified here */
#preview-pane .preview-container {
width: 250px;
height: 175px;
overflow: hidden;
}
</style>
<img src="sago.jpg" id="target" alt="Jcrop Example" />
<div id="preview-pane">
<div class="preview-container">
<img src="sago.jpg" id="target2" class="jcrop-preview" alt="Preview" />
</div>
</div>
<form action="image.php" enctype="multipart/form-data" method="post" onsubmit="return checkCoords();">
<input type="file" name="file" name="imageinput" size="30" onchange="readURL(this);" />
<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" class="btn btn-large btn-inverse" />
</form>