在我的應用程序中,用戶可以拍攝照片或從設備上傳圖像。該圖像是Jcrop功能的來源。此功能正常工作,因爲它'正確'收割。然而,預覽剪裁內容的jcrop-tracker並不顯示它在圖像上的正確位置。爲什麼Jcrop-tracker不顯示正確的位置?
請看下面的例子:
當移動跟蹤到圖像的頂部,它會顯示出幾乎整個圖像。當進一步向下移動時,它什麼都不會顯示。這怎麼可能?
我的猜測是這是因爲jCrop有縮減圖片的問題(例如從設備相機拍攝的照片)。
我用CSS來縮減圖像,以便它可以適合在設備屏幕上:
#imgContainer {
max-width: 100%;
max-height: 100%;
}
#imgContainer img {
max-width: 100%;
max-height: 100%;
}
有什麼辦法防止這種情況?
這裏是我的代碼:
$(window).load(function() {
var jcrop_api, boundx, boundy;
function updatePreview(c) { // croping image preview
if (parseInt(c.w) > 0) {
var rx = 220/c.w, ry = 220/c.h;
}
}
function showCoords(c) { // show all coords
$('#x').val(c.x);
$('#y').val(c.y);
$('#x2').val(c.x2);
$('#y2').val(c.y2);
$('#w').val(c.w);
$('#h').val(c.h);
}
$('#cropImage').Jcrop({
onChange: updatePreview,
onSelect: showCoords,
bgFade: true,
bgOpacity: .8,
aspectRatio: 1,
maxSize: [ 150, 150 ],
boxWidth: 284,
boxHeight: 382
},function(){
jcrop_api = this;
});
var canvas = document.getElementById("canvasresult");
$("#m1-cropScreen-cropIt").on("click", function(){
var context = canvas.getContext("2d");
var img = document.getElementById("cropImage"),
$img = $(img),
imgW = img.naturalWidth,
imgH = img.naturalHeight;
console.log($img.width());
console.log($img.height());
var ratioY = imgH/$img.height(),
ratioX = imgW/$img.width();
var getX = $('#x').val() * ratioX,
getY = $('#y').val() * ratioY,
getWidth = $('#w').val() * ratioX,
getHeight = $('#h').val() * ratioY;
context.drawImage(img,getX,getY,getWidth,getHeight,0,0,150,150);
$('#cropResult').attr('src', canvas.toDataURL());
});
});
你能發表一些我們可以直接測試的東西嗎? (我錯過了一些HTML源代碼,所以小提琴或其他東西都會很方便) – Veda
我想你的問題是由於沒有使用「正確的」圖片尺寸,而不是將它們「轉移」到實際的屏幕/顯示尺寸!此外,使用'max-height:100%'可能會導致圖像縱橫比發生變化(當圖像的高度高於100%寬度時的視口高度)。我認爲您必須根據視口寬度轉換圖片的寬度和高度,進行裁剪並將裁剪轉換回原始圖像大小。 – Netsurfer
嗯,你可能在這裏有一個觀點。任何想法如何將圖像轉換爲視口寬度的大小? – Forza