【问题标题】:HTML5 Canvas image crop, resize, and save without losing qualityHTML5 Canvas 图像裁剪、调整大小和保存而不损失质量
【发布时间】:2013-07-11 06:27:32
【问题描述】:

  • 我的画布宽度等于窗口宽度。
  • 我正在将图像 (1920x1080) 绘制到画布上。
  • 然后我选择了区域以裁剪画布内的图像,该区域将为 492x369。
  • 裁剪图像后,我想将裁剪后的图像缩放为 1024x768。

但是当我缩放该图像时,它会失去其质量..

如何在不损失质量的情况下缩放图像?

我执行的步骤是

  1. 向主画布添加图像
  2. 画布上的选定裁剪区域
  3. 使用 getImageData() 将裁剪后的图像数据存储在 temp 变量中。
  4. 在内存中创建了新的画布
  5. 使用 putImageData() 将图像数据添加到新的内存画布中
  6. 然后使用 newcanvas.toDataURL() 获取 base64 图像数据

【问题讨论】:

    标签: javascript html canvas


    【解决方案1】:

    简单的答案是你不能..

    图像在缩放时被插值。如果源图像质量低下(如本视频快照中所示),则结果充其量是相同的,但如果不进行一些复杂的处理,则永远不会更好。

    在这种情况下,视频快照被严重压缩,因此您会得到一个块状图像(MPEG 压缩的结果),这在原始尺寸上并不明显,但在缩放时变得很明显(您只会更好地看到伪影,因为它们也是缩放)。

    【讨论】:

    • 感谢 Ken,您能否针对此问题提出任何其他解决方案。例如如果我们看到 Photoshop,我们有大尺寸的图像,我们将其缩小并裁剪特定区域,并且生成的图像分辨率将被正确设置而不会丢失其质量。我想用 HTML5 画布做同样的事情。
    • @DonYogesh 不幸的是,它比这更复杂一些。您首先需要具有更高比特率的更好视频质量(帧尺寸并不能保证质量)。结果永远不会比原来的更好,它可以被伪装和合成,但永远不会包含比最初更多的(实际)信息。如果您将相同的图像放入 Photoshop 中,放大后的结果将大致相同,但是当 PS 进行实际缩放时,它会使用高级双三次插值以及其他增强功能,例如根据您的需要进行模糊或锐化。
    • 我实际上是在使用更高质量的图像而不是视频。无论如何谢谢..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2015-03-04
    • 2013-10-18
    • 1970-01-01
    • 2012-02-13
    相关资源
    最近更新 更多