在单个 html 页面中提供大量(例如 500 个)条形码图像(代码 128,黑白)的最佳方式是什么。根据我有限的经验,我看到了不同的选择
- 生成一个嵌入了条形码(base64 编码)的静态 html 页面。
- 将条形码作为图像提供(500 个单独的请求!)
- 使用客户端 JS 条码生成器(不确定可用库的质量和大小。我看到的很少,不想使用它们)
我使用 AngularJS 作为前端,条形码是在后端生成的。我主要针对现代浏览器(主要是最新的chrome)
有更好的办法吗?
谢谢。
在单个 html 页面中提供大量(例如 500 个)条形码图像(代码 128,黑白)的最佳方式是什么。根据我有限的经验,我看到了不同的选择
我使用 AngularJS 作为前端,条形码是在后端生成的。我主要针对现代浏览器(主要是最新的chrome)
有更好的办法吗?
谢谢。
将条形码生成为 1px 高的 png 精灵。包含 500 个条形码、每个 100 像素宽的 png 的文件大小应小于 20KB。在 using 中显示它background-repeat: repeat-y
并将background-position-x
值设置为(barcodeIndex * -100) + "px"
:
.barcode
{
background-image: url(barcodes.png);
background-repeat: repeat-y;
height: 35px;
width: 100px;
display: inline-block;
margin: 0 17px 14px 0;
}
来自 png sprite 演示的 250 个条形码:http: //jsfiddle.net/agFvK/4/
关于#2,这只是图像优化加载。您是正确的,500 个单独的请求是不可取的。关于这种方法,您有几个选择。
1) 一张包含所有图像的巨型图像。使用 css 定位来显示它们中的每一个。这种技术称为精灵
2)你真的需要一次显示所有的图像吗?如果您仅按需使用它们,则仅在用户执行应显示它们的操作时动态添加它们。
3)如果您确实需要显示所有这些,请考虑涉及页面滚动的动态加载方法。您可能会在页面加载时加载前 10 个,然后当用户滚动到屏幕底部时,您会加载接下来的 10 个。
关于生成它们的 javascript 库,请再考虑一下。如果可能的话,那将是最好的方法。听起来您可能是许多用户的成千上万个独特的条形码。如果这确实是您的情况,那么将其推送到客户端将意味着您的服务器上的负载要少得多。
我在使用服务器端生成的大条形码中的图像时遇到了很多问题。我发现解决这个问题的唯一方法是在客户端生成条形码,使用 HTML 和 CSS。
您可以使用 PHP 来生成 DIV,而不是生成图像。
这个小提琴说明了如何使用 js:http: //jsfiddle.net/u7uPJ/2/
该解决方案不使用 js 库,仅使用条形码类。使用库,您可以使用以下内容生成大量条形码:
$('div.barcodeC').each(function(){
this.appendChild(Barcode(this.className.match(/barcode\-([A-Za-z0-9\-]+)/)[1], "code128",{barWidth:2, barHeight:50}));
});
我会找到算法并编写自己的客户端生成器。为此,我会考虑几个选项:对垂直线使用左浮动 div(您可以使用左边界、宽度、右边界、右边界)、使用画布或使用 css3 线性渐变。
UPD:我通过使用 base64 编码的图像将我的投票更改为 #1,我认为客户端显示它们会更快(因为生成条形码需要一些 cpu)并且您可以将图像存储在数据库中。如果它们是 svg 格式可能会更好,因此它们的打印效果会更好,并且在视网膜屏幕上看起来更清晰(顺便说一句,内联 svg 也不错)。
我不喜欢提到的将图像组合成精灵的解决方案,我认为维护和更新这样的文件并不容易。