首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何增加画布位深度以在javaScript中创建更高质量的图片?以及如何在输出时增加画布的大小。

如何增加画布位深度以在javaScript中创建更高质量的图片?以及如何在输出时增加画布的大小。
EN

Stack Overflow用户
提问于 2012-10-14 23:56:18
回答 2查看 3.8K关注 0票数 2

我是HTML5和JavaScript的新手,我正在尝试使用画布元素来创建一个高质量的输出图像。

  1. 当前的目的是允许用户访问他们自己的所有映像(jpeg、png、svg)。这就像一种魅力。然而,当我呈现图像时,它总是32位的png。如何使用JavaScript(最好)创建更高质量的图片?
  2. 当我输出文件时,它似乎总是保持与画布相同的分辨率,我如何使用JavaScript(最好)来更改它?

谢谢各位,我环顾四周一段时间,却找不到答案:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-16 03:40:51

首先,当您将图像绘制到画布上时,它还不是png,它是一个简单的原始位图,在画布API中工作,您称之为它的方法,然后将其转换为png,以便浏览器显示它,这就是使用toDataURL时得到的结果。在使用toDataURL时,您可以选择希望输出的图像格式,我认为jpeg和bmp与png一起支持。(不要把它看作是转换成另一种格式的png,因为它不是)

我不知道你说的更高的质量是什么意思,你可以看到32位就足够让所有的RGBA通道都有一个真正的颜色8位深度给你比人眼一次能看到的更多的颜色。我知道,取决于用户对你的图片的曝光和角度,他对颜色的感知可能会有所不同,但不是它的质量,我会说,这仅仅取决于它的分辨率。无论如何,画布的设计并不是为了处理那些更深层次的颜色,老实说,在画布上可以渲染的任何场景中,都不需要大量的颜色信息,这只适用于大制片厂制作的高清晰度电影和游戏,而且,即使你可以在画布上使用深浅的颜色,它也将真正依赖于用户的录像机和屏幕的支持,我认为大多数人都没有这种支持。

如果您希望向每个像素的颜色添加不直接相关的信息,但是可能在标记转换时,它们可以让您更好地创建您自己的类型,能够携带画布API可以接受的imageData,保持它的32位格式,以及相应数组上的附加信息。

是的,输出图像具有与画布相同的分辨率,但是有几种方法可以帮助您调整最终构图的大小。就像Simon Sarris说的那样,创建一个屏幕外画布,其中的分辨率是您想要的图像的最终分辨率,那么,您可以:

  1. 通过调用drawImage来调整光栅图像的大小,同时利用调整大小的参数提供toDataURL生成的图像
  2. 如Simon所说,在那里重新绘制场景,这将减少质量损失,如果您的构图包含通过画布API创建的形状,而不仅仅是图像文件放在一起的话。

如果您事先知道最终的分辨率,那么只需将画布的宽度和高度设置为它,但是CSS的宽度和高度可以不同的设置,以便您的画布适合您的网页。

票数 -1
EN

Stack Overflow用户

发布于 2012-10-15 03:10:18

如果要使用getImageData或toDataURL创建更大的映像,则必须:

  1. 创建一个比普通画布更大的内存中画布。
  2. 把你的整个场景重新画到你记忆中的画布上。您可能希望调用内存中的上下文中的ctx.scale(theScale, theScale)来扩展映像,但这在很大程度上取决于它们最初是如何创建的(图像?帆布路径?)
  3. 在内存中的画布上调用getImageDatatoDataURL,而不是普通的画布。

记忆中的画布是指:

代码语言:javascript
运行
复制
var inMem = document.createElement('canvas');
// The larger size
inMem.width = blah;
inMem.height = blah;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12887711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档