为啥 Jcrop-tracker 不显示它的正确位置?

Posted

技术标签:

【中文标题】为啥 Jcrop-tracker 不显示它的正确位置?【英文标题】:Why does the Jcrop-tracker not show it's correct position?为什么 Jcrop-tracker 不显示它的正确位置? 【发布时间】:2014-03-13 10:05:39 【问题描述】:

在我的应用中,用户可以从他们的设备上拍照或上传图片。此图像是 Jcrop 函数的来源。此功能正常工作,因为它正确“裁剪”。但是,预览您正在裁剪的内容的 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 源代码,所以一个小提琴或其他东西会很方便) 我猜你的问题源于没有使用“正确”的图像尺寸,分别没有将它们“转移”到实际的屏幕/显示尺寸!此外,使用max-height: 100% 可能会导致图像的纵横比发生变化(当图像的高度高于 100% 宽度的视口高度时)。我认为您必须根据视口宽度转换图片的宽度和高度,进行裁剪并将裁剪转换回原始图像大小。 嗯,你可能有一个观点。知道如何将图像转换为视口宽度的大小吗? 也可以在问题中包含您的 HTML 吗? 我计算了这里引用的 12 个 DOM 元素,但没有提供 DOM。没有 HTML 就无法调试此代码,因为它很可能与您的页面布局有关。 【参考方案1】:

先生,很抱歉未能及时回复您。谢谢大家回答我的问题。

我度过了一个非常忙碌的一周,所以我几乎没有时间从事这个项目。今天又捡起来了,先尝试自己再解决这个问题。

幸运的是,这次成功了。我最终使用了 Jcrop 的box sizing method。我相信我以前曾尝试过,但这次它完美无缺。所以问题解决了:)

【讨论】:

【参考方案2】:

不幸的是,这对我不起作用,但我遇到了一个不同的问题,希望能帮助遇到此问题的其他人。

我的问题是由于 CSS 样式冲突。

 From a 3rd party style sheet
 img  max-width: 100% 

  My Style Sheet -- adding this fixed it
 .jcrop-holder img, img.jcrop-preview  max-width: none !important 

【讨论】:

以上是关于为啥 Jcrop-tracker 不显示它的正确位置?的主要内容,如果未能解决你的问题,请参考以下文章

在EXCEL表格中输入身份证号的时候为啥总是显示科学记数法

在 HLSL 中进行 64 位加法,为啥我的一种实现会产生不正确的结果?

为啥在EXCEL表格中输入银行卡账号最后3位只显示0呢

为啥我不能在 64 位机器上正确读取 HKCU 中的 32 位注册表值?

为啥显示不正确的 ViewController?以及如何显示正确的?

为啥grafana在不正确的时间段显示值?