给定某些尺寸的最大潜在PNG尺寸

 mobiledu2502857827 发布于 2023-02-12 15:29

我目前正在创建一个canvas基于HTML5 的绘图程序.用户可以绘制图像或几个"页面"图像,并将其保存到云中以便以后快速检索.这适用于交互式白板; 老师不能总是确定他们计划上课的IWB是他们将在该课程中使用的那个,所以我想让数据可以从任何地方访问.

我通过Ajax将画布数据作为数据URI发送到服务器,将数据存储在文件系统中,并在数据库中存储对文件的引用.我的问题是,我不确定这些图像最终会占用多少文件系统空间.

这些文件保存为带有Alpha透明层的PNG,并且为1280x720px.根据绘制的内容,文件大小会有很大差异,我认为这是因为PNG是压缩的.因此,我无法计算出这样的图像可能存在的最大文件大小.由于我想假设最坏情况,我假设PNG压缩不会减少文件大小.鉴于此,最大文件大小是:

1280 x 720 x colordepth

?如果是这样,在colordepth我使用导出图像的情况下应该是什么值canvas.toDataURL()?它会根据浏览器的实现而有所不同canvas吗?我完全在黑暗中.

我知道PNG压缩对照片风格的图像效果不佳,所以我一直在尝试创建一些不易压缩的东西(主要是柔和的,相当随机的渐变).我能够创建的最大值约为675KB,但我确信它远不及潜在的最大尺寸.

所以我要么知道最大文件大小是什么,或者什么样的图像在PNG中提供压缩的可能性最小,所以我可以更好地进行实验.

我希望这是有道理的.


SO上有一些类似的问题:

如何根据文件大小限制确定png维度?

图像的最大尺寸不能超过8000字节?

但似乎没有人回答我的问题.如果我错过了什么,请告诉我.


UPDATE

我试过Ken Fyrstenberg的想法,初步结果很有意义.将图像存储为序列化对象会导致一组数据小于等效dataURL字符串的四分之一.这是在我开始优化它之前.我强烈建议任何处于类似情况的人都试试这种方法.


另一个更新

当我第一次开始这个时,我正在使用SVG.但是,用户绘制的越多DOMElement,一次必须在屏幕上显示的s 越多,响应时间变得越慢(尤其是> 1000个元素).我曾经假设用画布做这件事,并在用户制作时将每个笔画存储在一个数组中,会出现类似的问题."不是这样.

我想,与跟踪DOM元素及其所有属性,文档中的位置以及与其他元素的关系相比,简单地存储路径数据的开销要少得多.

Upshot是,无论我多少次插入阵列,重绘操作总是闪电般快速.除了在存储数据以供以后使用时上述尺寸的减小,以及非常容易实现撤销/重做之外.现在对Javascript和canvas印象非常深刻.

1 个回答
  • 为了计算位图的大小,PNG使用假设存在alpha通道

    width x height x 4
    

    将为您提供原始未压缩字节的大小.

    使用原因4是因为RGBA(通常)表示为32位(因此4字节).

    如果不存在alpha通道而不是3乘以(24位,每个8位RGB).

    除了那个标题和块将添加到大小但压缩将减小大小.

    然而,我认为这将为您提供足够好的数字作为最大值.

    在您的情况下,大小将是最大的:

    1280 x 720 x 4 = 3 686 400 bytes
    

    为了达到千字节除以1024,在1024上再次得到mb除(这里的结果是3.5mb).

    提示:对于共享绘图,您可能需要考虑共享序列化对象而不是数据uri,因为数据uri创建是性能饥饿并且会产生不必要的开销,而序列化对象通常具有较小的大小和较低的性能影响.它们也更容易通过网络传输.对象可以包含线条位置,颜色等.

    2023-02-12 15:31 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有