【问题标题】:How can I convert PNG to GIF keeping the transparency?如何在保持透明度的情况下将 PNG 转换为 GIF?
【发布时间】:2015-08-26 01:15:04
【问题描述】:

如何在保持透明度的情况下将 PNG 转换为 GIF?

我希望使用 Assign() 方法会起作用,但它似乎并没有迁移透明度。在 GIF 中,它表示为黑色。

    png:=TPngImage.Create;
    try
      png.LoadFromFile(sFile);
      // comes from file:  png.TransparencyMode;
      // comes from file:  png.Transparent

      // didn't help:  gif.Transparent:=true;

      gif.Assign(png);

      // didn't help:  gif.Transparent:=true;

      gif.SaveToFile('e:\tmp\out.gif');
    finally
      png.Free;
    end;

我还没有找到在 Delphi 中处理这个问题的方法...

谢谢!

【问题讨论】:

  • 好吧,看起来不一样。 PNG 支持具有 alpha 透明度的完整 RGB 颜色。 GIF 有 256 个调色板和每像素透明度。人们不得不问为什么您选择使用这种劣质的图像格式。现在是 2015 年!
  • @DavidHeffernan PNG 也支持 8 位索引模式
  • @DavidHeffernan 我的错!我读到他想将 GIF 转换为 PNG,这很容易做到,因为 PNG(无动画)在功能方面是 GIF 的超集(aPNG 和 MNG 可能是严格的超集)。 PNG到GIF确实只能在简单的情况下完成
  • 是时候停止使用 GIF 了。它拖累了你。
  • @X-Ray FastReports 可以毫无问题地处理 PNG。

标签: delphi graphics png gif


【解决方案1】:

可以将图像从 PNG 转换为 GIF。但是,我不建议您这样做。 GIF 格式的功能远不如 PNG。 PNG 支持 RGBA 颜色通道和部分透明度。 GIF 使用 256 色调色板,不支持部分透明。

有许多可用的库可以充分利用糟糕的工作并尝试生成接近 PNG 图像的 GIF 图像,但信息会丢失。

GIF 格式可以追溯到 1980 年代末期,并且随着时间的推移而不断发展。它早就达到了它的目的。 PNG 是现代的、有能力的并且得到很好的支持。如果可以的话,你应该从 GIF 切换到使用 PNG。

【讨论】:

  • 不是专门针对你的,但是当人们开始提到动画时,这是一个矛盾:“GIF 格式可以追溯到 1980 年代后期”......但我们仍在使用 GIF 制作动画和我们的浏览器开发人员太固执和矛盾,无法就其他任何事情达成一致。
  • @oldmud0 好的,我写这篇文章时并没有想到动画 GIF。这是一个公平的观点。不过,我认为我们距离能够在这个领域使用 HTML5 视频并不遥远。
  • 它已经被用于一些较长的动画,其中有损很好(WebM),但是当需要无损时(或者你的图像非常小),真的没有替代 GIF 的替代品只有 1 位透明度。
猜你喜欢
  • 2015-01-26
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 2012-03-22
  • 2012-03-29
相关资源
最近更新 更多