**编辑**我必须导出一个大画布(5Mo
当我导出我的画布(使用toDataUrl)时,它总是返回一个带有alpha通道的. png文件的bas64表示。阿尔法通道权重约为图像数据的25%,我不需要它。
建议的答复:
有没有办法将我的画布导出为. png,但没有alpha通道?如果"否",是否有一种方法(lib)在javascript修剪alpha通道?导出为. jpeg不是一个解决方案,我需要一个. png文件。
谢谢!:)
在画布上绘图之前,应该先填充画布(使用您想要的背景颜色)。
例如,以前:
var ctx = canvas.getContext('2d');
drawEverythingOnMyContext(ctx);
image = canvas.toDataURL();
之后:
var ctx = canvas.getContext('2d');
// draw a background
ctx.fillStyle = 'white';
ctx.fillRect(0, 0, canvas.width, canvas.height);
// draw then
drawEverythingOnMyContext(ctx);
image = canvas.toDataURL();
我的目标和你的相似:导出PNG格式的画布,并在将其发送到服务器之前从其数据URL表示中删除alpha通道信息。然而,我的理由和你的不同。我想在另一端将结果图像文件合并为PDF,我使用的img2pdf库无法处理alpha通道信息。我为画布使用的库fabric.js,但是通过toDataUrl()导出任何HTML5画布时都会出现问题。
幸运的是,有一个很好的javascript库,名为pngjs,它可以在javascript中操作PNG文件。它附带异步和同步例程。这就是我如何将DataURL从Alpha转换为非Alpha。您的第3步(博客的数据URL)应该足以完成这项工作。
let PNG = require('pngjs').PNG;
/* thehref: DataURL form of a png file. */
function removeAlphaFromDataUrl(thehref) {
let dataurlstring = "data:image/png;base64,"
let buff = new Buffer(thehref.slice(22), 'base64')
let png = PNG.sync.read(buff);
let options = { colorType: 2 };
let buffer = PNG.sync.write(png, options);
let output = buffer.toString('base64');
let newhref = dataurlstring + output
return newhref;
}
PNG压缩是好的。如果alpha通道是平坦的(所有值都相同),则不会占用太多空间。
您可以使用复合操作“destination over”填充透明和半透明像素。
以下函数将所有像素的alpha值设置为1。
function fillAlpha(ctx, bgColor){ // bgColor is a valid CSS color ctx is 2d context
// save state
ctx.save();
// make sure defaults are set
ctx.globalAlpha = 1;
ctx.setTransform(1, 0, 0, 1, 0, 0);
ctx.filter = "none";
// fill transparent pixels with bgColor
ctx.globalCompositeOperation = "destination-over";
ctx.fillStyle = bgColor;
ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
// cleanup
ctx.restore();
}
然后,您可以将图像保存为PNG,阿尔法通道尽可能小。
问题内容: 是否可以设置和获取布局的Alpha /不透明度及其所有子视图?我不是在说背景。在相对布局中说出视频控件的集合,例如播放,暂停和进度条。 我可以使用动画淡入淡出,但想知道是否可以使用直接方法。 问题答案: 您可以使用持续时间为0的AlphaAnimation和setFillAfter选项在布局及其子级(或其他任何视图)上设置Alpha。 例: 您可以将一个动画用于多个组件以节省内存。
我有一个包含透明图标(32位,带alpha通道)的。我想做的是将基于图像索引的单个图标保存为PNG文件,同时保留alpha通道的透明度。使用RAD Studio 2010,因此它具有支持,不需要第三方库。图像从PNG“精灵”图像中加载到TImageList中,使用这里的方法——在运行时使用Delphi XE将png图像添加到图像列表中——因此加载时保留透明度。现在我需要单独保存它们,换句话说,从已
问题内容: 嘿,当我从png创建缩略图时,尝试保持png的透明度时遇到麻烦,有人对此有任何经验吗?任何帮助都会很棒,这是我目前正在做的事情: 问题答案: 过去,我已经成功地做到了: 我发现输出图像使用质量更好的比
我正试图重新设计我的网站,使我原来的方形、基于瓷砖的图像渲染更像是图像的剪贴画。。。为了摆脱网格模式。 这是它最初的样子。。。 这是我想要的一个粗略的模型: 所以我重新保存了一个透明背景的图像缩略图。。。我只想让狗展示,正方形是透明的,可以在下面显示网站的背景。 然而,当我在页面上呈现它时,它的背景是黑色的。 我已经检查了我的CSS,看看是否有某种img类,或用于渲染漫画的类。。。甚至可以通过引导
问题内容: 我已经实现了[waypoints][1]插件,当对象的像素高于100px时,该对象就会褪色。[使用offet属性],但希望基本上控制对象的不透明度并使动画可见,如上面的示例。 我已经搜寻了全部-这是我的最后选择。任何帮助是极大的赞赏。 问题答案: 我在这里复制粘贴基本代码
问题内容: 我正在使用以下代码读取PNG图片: 在显示时,有一个黑色背景,我知道是由PNG透明性引起的。 我找到了建议使用的解决方案,但是我不确定如何将其应用于上面的代码。 问题答案: 创建第二个类型… 将原件涂到副本上… 您现在有了图像的非透明版本… 要保存图像,请看写/保存图像