【发布时间】:2015-09-14 16:48:39
【问题描述】:
我必须缩小图像并在浏览器中将它们转换为 jpeg。为此,我一直在使用一个名为Hermite-resize的javascript调整大小函数@
这很好用。在重新调整了几百张图像的大小后,我注意到每隔一段时间就会发生一次奇怪的事情。对于某些图像,缩小的 jpeg 图像底部会出现一条细黑线。
我认为这可能是由于在缩小版本中呈现了透明线。转换为 jpeg 后,由于 jpeg 将无背景变为黑色背景,因此线条变为黑色。
但是,如果我在将图像渲染为 jpeg 之前在图像后面放置一个白色背景,那么问题仍然存在。
如果有人知道这是什么造成的,或者如何解决它,我将不胜感激。
一个 jsfiddle 来澄清我的意思:
canvas.getContext("2d").fillStyle = '#FFF';
canvas.getContext("2d").fillRect(0, 0, W2, H2);
canvas.getContext("2d").putImageData(img2, 0, 0);
document.getElementById("imageid").src = canvas.toDataURL("image/jpeg");
http://jsfiddle.net/gt4r54zr/1/
我不确定它是否相关,但如果我在 Hermite 脚本中将透明度设置为完全 (255),那么同样的黑线也会出现:
data2[x2 + 3] = 255;// Original value: gx_a / weights_alpha;
【问题讨论】:
-
这只发生在精确的像素值上吗?
-
优秀的问题邀请。实际情况就是这样。对于示例中的图像,我将所有像素值放入 pastebin (pastebin.com/C43FM9k8)。不过,我没有看到太多的模式。虽然我不太明白怎么做,但 rphv 的回答似乎确实解决了我的问题,所以我很高兴 :)。
标签: javascript image image-resizing