如何限制可裁剪区域的宽度和高度以输出相同大小的图像?
How can I constrain the width and height of the croppable area to output the same size image?
美好的一天-
我想使用 jQuery Cropper.js 插件来创建一个网络表单,其中包含用户可以上传图片然后裁剪的字段。
我希望输出的图像始终为 580 x 580。
我想让用户无法更改裁剪区域的大小。我希望它始终为 580 x 580。
我还看到,当我缩放 in/out 时,我看到宽度和高度发生了变化。
我也看到其他人说我可以在服务器上调整图像的大小,但是如果图像被裁剪并且非常小,那么我不知道它是如何工作的。将图像放大将是一个问题。
这是我设置裁剪器的方法。
jQuery( image ).cropper({
preview: '.img-preview',
aspectRatio: 1 / 1,
responsive: true,
restore: true,
modal: true,
guides: false,
center: true,
dragMode: 'crop',
movable: true,
ready: function (event) {
jQuery(this).cropper('setData', {
width: 580,
height: 580
});
},
crop: function(event) {
jQuery('#height').val(Math.round(event.detail.height));
jQuery('#width').val(Math.round(event.detail.width));
jQuery('#x').val(Math.round(event.detail.x));
jQuery('#y').val(Math.round(event.detail.y));
jQuery('#angle').val(Math.round(event.detail.rotate));
}
});
其他一切正常。我正在裁剪图像,将原始图像保存到服务器,裁剪图像,将裁剪后的图像转换为 Blob,然后将其发送到服务器并让 Imagick 处理图像。
提前致谢!
以下是我最终用于 jquery.cropper 的设置:
jQuery( image ).cropper({
preview: '.img-preview',
viewMode:3,
aspectRatio: 1 / 1,
strict: true,
guides: false,
dragMode: 'move',
movable: true,
highlight: true,
dragCrop: false,
cropBoxResizable: true,
data: { width: 580, height: 580 },
autoCropArea: 0,
minWidth: 580,
minHeight: 580,
maxWidth: 2400,
maxHeight: 2400,
ready: function (event) {
jQuery(this).cropper('setData', {
width: 580,
height: 580
});
},
crop: function(event) {
jQuery('#height').val(Math.round(event.detail.height));
jQuery('#width').val(Math.round(event.detail.width));
jQuery('#x').val(Math.round(event.detail.x));
jQuery('#y').val(Math.round(event.detail.y));
jQuery('#angle').val(Math.round(event.detail.rotate));
jQuery('#scalex').val(Math.round(event.detail.scaleX));
jQuery('#scaley').val(Math.round(event.detail.scaleY));
}
});
在裁剪按钮上,我必须添加这个按钮,这会将裁剪区域的大小调整为 580x580。我用它来向用户展示它的外观预览。
$('#btnCrop').click(function() {
var croppedImageDataURL = image.cropper('getCroppedCanvas', {width:580, height:580}).toDataURL("image/jpg");
result.append( jQuery('<img>').attr('src', croppedImageDataURL) );
});
我有另一个用于 appendFileandSubmit() 操作的函数。我在那里添加了相同的东西以将图像缩小到 580x580。
// click function to handle the image
function appendFileAndSubmit(){
var form = document.getElementById("cropperform");
var croppedImageDataURL = image.cropper('getCroppedCanvas', {width:580, height:580}).toDataURL("image/jpg");
// Split the base64 string in data and contentType
var block = croppedImageDataURL.split(";");
// Get the content type of the image
var contentType = block[0].split(":")[1];// In this case "image/gif"
// get the real base64 content of the file
var realData = block[1].split(",")[1];// In this case "R0lGODlhPQBEAPeoAJosM...."
// Convert it to a blob to upload
var blob = b64toBlob(realData, contentType);
// Create a FormData and append the file with "image" as parameter name
var formDataToUpload = new FormData(form);
formDataToUpload.append("image", blob);
/**
* The following code should send 2 post parameters:
* filename: providen by the text input
* image: a file, dinamically added from a base64 string using javascript
*
* Is up to you how to receive the file in the Server side.
*/
jQuery.ajax({
url:"finish-image.php",
data: formDataToUpload,// Add as Data the Previously create formData
type:"POST",
contentType:false,
processData:false,
cache:false,
dataType:"json", // Change this according to your response from the server.
error:function(err){
console.error(err);
},
success:function(data){
console.log(data);
jQuery('#FinalStep .outputMsg').html('<p>Success!</p>');
},
complete:function(){
console.log("Request finished.");
}
});
}
这会将 580x580 的图像提交给脚本进行处理。
美好的一天-
我想使用 jQuery Cropper.js 插件来创建一个网络表单,其中包含用户可以上传图片然后裁剪的字段。
我希望输出的图像始终为 580 x 580。
我想让用户无法更改裁剪区域的大小。我希望它始终为 580 x 580。
我还看到,当我缩放 in/out 时,我看到宽度和高度发生了变化。
我也看到其他人说我可以在服务器上调整图像的大小,但是如果图像被裁剪并且非常小,那么我不知道它是如何工作的。将图像放大将是一个问题。
这是我设置裁剪器的方法。
jQuery( image ).cropper({
preview: '.img-preview',
aspectRatio: 1 / 1,
responsive: true,
restore: true,
modal: true,
guides: false,
center: true,
dragMode: 'crop',
movable: true,
ready: function (event) {
jQuery(this).cropper('setData', {
width: 580,
height: 580
});
},
crop: function(event) {
jQuery('#height').val(Math.round(event.detail.height));
jQuery('#width').val(Math.round(event.detail.width));
jQuery('#x').val(Math.round(event.detail.x));
jQuery('#y').val(Math.round(event.detail.y));
jQuery('#angle').val(Math.round(event.detail.rotate));
}
});
其他一切正常。我正在裁剪图像,将原始图像保存到服务器,裁剪图像,将裁剪后的图像转换为 Blob,然后将其发送到服务器并让 Imagick 处理图像。
提前致谢!
以下是我最终用于 jquery.cropper 的设置:
jQuery( image ).cropper({
preview: '.img-preview',
viewMode:3,
aspectRatio: 1 / 1,
strict: true,
guides: false,
dragMode: 'move',
movable: true,
highlight: true,
dragCrop: false,
cropBoxResizable: true,
data: { width: 580, height: 580 },
autoCropArea: 0,
minWidth: 580,
minHeight: 580,
maxWidth: 2400,
maxHeight: 2400,
ready: function (event) {
jQuery(this).cropper('setData', {
width: 580,
height: 580
});
},
crop: function(event) {
jQuery('#height').val(Math.round(event.detail.height));
jQuery('#width').val(Math.round(event.detail.width));
jQuery('#x').val(Math.round(event.detail.x));
jQuery('#y').val(Math.round(event.detail.y));
jQuery('#angle').val(Math.round(event.detail.rotate));
jQuery('#scalex').val(Math.round(event.detail.scaleX));
jQuery('#scaley').val(Math.round(event.detail.scaleY));
}
});
在裁剪按钮上,我必须添加这个按钮,这会将裁剪区域的大小调整为 580x580。我用它来向用户展示它的外观预览。
$('#btnCrop').click(function() {
var croppedImageDataURL = image.cropper('getCroppedCanvas', {width:580, height:580}).toDataURL("image/jpg");
result.append( jQuery('<img>').attr('src', croppedImageDataURL) );
});
我有另一个用于 appendFileandSubmit() 操作的函数。我在那里添加了相同的东西以将图像缩小到 580x580。
// click function to handle the image
function appendFileAndSubmit(){
var form = document.getElementById("cropperform");
var croppedImageDataURL = image.cropper('getCroppedCanvas', {width:580, height:580}).toDataURL("image/jpg");
// Split the base64 string in data and contentType
var block = croppedImageDataURL.split(";");
// Get the content type of the image
var contentType = block[0].split(":")[1];// In this case "image/gif"
// get the real base64 content of the file
var realData = block[1].split(",")[1];// In this case "R0lGODlhPQBEAPeoAJosM...."
// Convert it to a blob to upload
var blob = b64toBlob(realData, contentType);
// Create a FormData and append the file with "image" as parameter name
var formDataToUpload = new FormData(form);
formDataToUpload.append("image", blob);
/**
* The following code should send 2 post parameters:
* filename: providen by the text input
* image: a file, dinamically added from a base64 string using javascript
*
* Is up to you how to receive the file in the Server side.
*/
jQuery.ajax({
url:"finish-image.php",
data: formDataToUpload,// Add as Data the Previously create formData
type:"POST",
contentType:false,
processData:false,
cache:false,
dataType:"json", // Change this according to your response from the server.
error:function(err){
console.error(err);
},
success:function(data){
console.log(data);
jQuery('#FinalStep .outputMsg').html('<p>Success!</p>');
},
complete:function(){
console.log("Request finished.");
}
});
}
这会将 580x580 的图像提交给脚本进行处理。