How to detect if an image generated via canvas is blank (transparent PNG)?(如何检测通过画布生成的图像是否为空白(透明 PNG)?)
问题描述
我正在开发一个应用程序,其中在 HTML5 画布上创建/编辑图像,然后将其保存到文件存储/云中.问题在于节约效率".在保存空白画布时,即使用 toDataURL()
发送完全透明的空白 PNG.检测空白 PNG 的一种方法是在单击任何编辑/绘图功能时切换布尔值并在清除屏幕时重置该值.
I am working on an application in which an image is created/edited on a HTML5 canvas and then saved into a file-store/cloud. The problem is that of "saving efficiency". On save of a blank canvas, i.e. a totally transparent blank PNG is sent with toDataURL()
. One way of detecting a blank PNG is by switching a boolean value upon click of any editing/drawing functionality and reseting that value upon clear-screen.
但是,这种方法并非万无一失,因为用户可能会在单击绘图/编辑功能后保存图像,但不会绘制任何内容.是否有更原生的方法来检测画布是否返回自在浏览器上打开以来已更改的二进制字符串?或者其他方法来确保在客户端检测到空白透明 PNG?
However, such a method is not foolproof because a user may save the image after clicking a draw/edit function and yet not draw anything. Is there a more native approach to detect if the canvas returns a binary string that has changed since opening up on the browser? Or some other way to ensure that a blank transparent PNG is detected at client side?
推荐答案
HTML:
<canvas id="canvas_img" width="300" height="200" border="0"></canvas>
脚本:
isCanvasTransparent(document.getElementById("canvas_img"));
function isCanvasTransparent(canvas) { // true if all pixels Alpha equals to zero
var ctx=canvas.getContext("2d");
var imageData=ctx.getImageData(0,0,canvas.offsetWidth,canvas.offsetHeight);
for(var i=0;i<imageData.data.length;i+=4)
if(imageData.data[i+3]!==0)return false;
return true;
}
更新:
不要为 CANVAS
使用像 border: 1px solid black;
这样的 CSS 样式声明,因为边框包含在画布图像中,因此 alpha chanel 总是不等于归零.
Dont use CSS style declarations like border: 1px solid black;
for CANVAS
, because border included into canvas image, and, as result, alpha chanel is always not equals to zero.
这篇关于如何检测通过画布生成的图像是否为空白(透明 PNG)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何检测通过画布生成的图像是否为空白(透明 PNG)?
基础教程推荐
- 用于 Twitter 小部件宽度的 HTML/CSS 2022-01-01
- 自定义 XMLHttpRequest.prototype.open 2022-01-01
- 如何使用TypeScrip将固定承诺数组中的项设置为可选 2022-01-01
- 如何使用JIT在顺风css中使用布局变体? 2022-01-01
- 我可以在浏览器中与Babel一起使用ES模块,而不捆绑我的代码吗? 2022-01-01
- 直接将值设置为滑块 2022-01-01
- html表格如何通过更改悬停边框来突出显示列? 2022-01-01
- Chart.js 在线性图表上拖动点 2022-01-01
- Electron 将 Node.js 和 Chromium 上下文结合起来意味着 2022-01-01
- Vue 3 – <过渡>渲染不能动画的非元素根节点 2022-01-01