首先,我对JavaScript的知识有些匮乏,表示抱歉。
我将简要解释我正在尝试做的事情 - 我正在尝试设置一组简单的功能,允许用户上传图像,裁剪、旋转和调整大小结果。
我不能百分之百确定这是最好的方法,但目前这是我唯一能想到的方法,所以请耐心等待。我使用了(或许有些笨拙的)方法,即使用一个带有overflow:hidden
属性的div进行剪裁,并在图像上使用clip:(rect...)
属性。
我的调整大小函数如下:
function ResizeClip(factor) {
var CropImg = document.getElementById('CroppedPreview');
var CropContainer = document.getElementById('hiddenCropInner');
var newHeight = CropImg.offsetHeight * factor;
var newWidth = CropImg.offsetWidth * factor;
var newwrapHeight = CropContainer.offsetHeight * factor;
var newwrapWidth = CropContainer.offsetWidth * factor;
var cX1 = document.getElementById('qx1').value * factor;
var cX2 = document.getElementById('qx2').value * factor;
var cY1 = document.getElementById('qy1').value * factor;
var cY2 = document.getElementById('qy2').value * factor;
document.getElementById('qx2').value = cX2;
document.getElementById('qx1').value = cX1;
document.getElementById('qy1').value = cY1;
document.getElementById('qy2').value = cY2;
CropImg.style.height = newHeight + 'px';
CropImg.style.width = newWidth + 'px';
CropImg.style.marginTop = '-' + cY1 + 'px';
CropImg.style.clip = 'rect(' + cX1 + 'px, ' + cX2 + 'px, ' + cY1 + 'px, ' + cY2 + 'px)';
CropContainer.style.height = newwrapHeight + 'px';
CropContainer.style.width = newwrapWidth + 'px';
}
CroppedPreview
是图片,hiddenCropInner
是包含 overflow:hidden
定义的容器 div。
也许我只是个白痴,但我无法想出为什么它不能正常工作。根据我裁剪图像的哪些部分,图像会移动,宽度和高度以不同的比例增加,导致裁剪区域发生变化...
我希望能够调整(并且最好还能以其他方式操作)这个裁剪后的图像,就像它是一个真正的图像一样。有没有更好的方法?否则,我该如何修复这个函数?
我将永远感激任何帮助,但请记住,我是个完全的新手,真的不知道自己在做什么,所以需要用较为通俗易懂的语言解释。我不是让任何人替我完成,但我已经试图想出一些方法来轻松地调整我想要的东西(裁剪后的图像),但几天来一直没有结果。因此,非常感谢任何人提供的帮助!
编辑 我现在创建了一个 fiddle,但令人尴尬的是,我甚至不能让它正常工作。尽管如此,它可以在这里找到:http://jsfiddle.net/Xenthide/x62L3/9/
我已经任意地定义了使用从未包含的裁剪函数中提取的值进行的初始裁剪,因为那似乎在很大程度上都能正常工作(好吧,还有它会使 fiddle 变得非常复杂)。本地代码似乎确实会导致图像大小发生变化,但出于我不知道的原因和无法改变的原因,fiddle 并没有...但希望它能使事情变得更清晰...
var cropPre = document.getElementById('CroppedPreview');
这样的东西和其他类似的定义,以避免每次调用document.getElementById
并获得一堵难以阅读的代码墙。这样做也会更快。 - MaxArtCropImg
是绝对定位的?这是必须的,否则clip
无法工作。无论如何,你应该用你的代码创建一个fiddle,因为它不是很清楚你得到了什么。 - MaxArtCroppedPreview
的定位...虽然最初剪辑确实有效,但我能够定义一个裁剪区域,然后从中产生一个剪辑图像。只是调整剪切图像大小会导致问题...令人尴尬的是,我的fiddle也无法工作...http://jsfiddle.net/Xenthide/x62L3/9/ - Xenthide