【发布时间】:2014-09-29 00:51:59
【问题描述】:
首先,我为我对 javascript 的一些可悲的知识表示歉意。
我将简要解释我正在尝试做什么 - 我正在尝试设置一组 SIMPLE 函数,以允许用户上传图像、裁剪、旋转和调整结果大小。
我不能 100% 确定这是最好的方法,但这是我目前能想到的唯一方法,所以请多多包涵。我正在使用带有overflow:hidden 的div 和图像上的clip:(rect...) 属性进行剪辑的(可能有些笨拙)方法。
我的resize函数如下:
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 是在 CSS 中定义了 overflow:hidden 的容器 div。
也许我只是个白痴,但我终其一生都无法弄清楚为什么它不能正常工作。根据我剪辑的图像的哪些部分,图像会四处移动,宽度和高度会以不同的速率放大,从而导致裁剪区域发生变化......
我想做的是调整这个裁剪后的图像的大小(理想情况下,进行其他操作),就好像它是真实的图像一样。有更好的方法吗?否则,我该如何修复该功能?
我将永远感谢任何帮助,但请记住,我是一个完全的新手,真的不知道自己在做什么,所以我需要为我解释清楚一些事情。我没有要求任何人为我做这件事,但我试图想出一些方法来做我想做的事情(轻松调整剪切图像的大小),但没有任何结果。所以,提前感谢您提供的任何帮助!
编辑我现在已经创建了一个小提琴,但令人尴尬的是我什至无法让它工作。尽管如此,它可以在这里找到:http://jsfiddle.net/Xenthide/x62L3/9/
我已经使用从我没有包含的裁剪函数中提取的值任意定义了初始剪辑,因为这在大多数情况下似乎工作正常(嗯,这只会使小提琴过于复杂)。在本地,该代码似乎确实会导致图像大小发生变化,但由于我未知且不可变的原因,小提琴不会......但希望它能让事情变得更清晰......
【问题讨论】:
-
我是否可以建议定义类似
var cropPre = document.getElementById('CroppedPreview');和其他类似定义的内容,以避免每次都调用document.getElementById并获得这样可读性差的代码墙?它也会更快。 -
谢谢,我已按照建议进行了编辑,并试图使其更具可读性。
-
我猜
CropImg绝对定位?这是强制性的,否则clip将不起作用。无论如何,你应该修改你的代码,因为你得到的不是很清楚。 -
我实际上还没有在任何地方定义
CroppedPreview的定位...虽然剪辑最初可以工作,但我能够定义一个裁剪区域,然后从中生成一个裁剪图像。只是调整剪裁图像的大小会导致问题......令人尴尬的是,我也无法让我的小提琴工作......jsfiddle.net/Xenthide/x62L3/9
标签: javascript css image resize clip