【问题标题】:Creating/Saving DirectDraw Surface (DDS) Image via Imagick通过 Imagick 创建/保存 DirectDraw 表面 (DDS) 图像
【发布时间】:2015-01-27 15:26:32
【问题描述】:

这是我第一次使用 PHP Imagick 并遇到问题。

我正在创建一个网站模块,用户可以在其中上传需要转换为加密文件类型的图像,其中包含上传的图像作为 DDS 纹理。

所以我需要做的是将上传的图片转换为dds文件格式。

代码:

$img = new Imagick('test.png'); //Load the uploaded image
$img->setformat('dds'); //Set the format to dds
$img->setImageCompression(Imagick::COMPRESSION_DXT3); //Set compression method
$img->writeimage('test.dds'); //Write/save the dds texture

问题:输出文件始终是一个空的 0 字节文件。

需要转换的PNG:test.png

DDS 那需要是输出:test.dds

也许我需要其他版本的 Imagick 或 ImageMagick?

我的版本是:

  1. PHP 5.5.15
  2. Imagick 3.1.2-5.5-ts-vc11-x86
  3. ImageMagick 6.8.4-0-Q16-x86

我目前正在 Windows 8.1 x64 上进行测试。

任何建议/帮助将不胜感激。

编辑:编辑了问题,希望它现在清楚我想要实现的目标。

已解决:问题在于不支持 DDS 写入的 ImageMagick 版本。

已安装 ImageMagick 6.8.6-10-Q16-x86,因为该版本中添加了 DDS 写入支持(较新的版本导致无法加载 imagick)。

我使用和工作的当前版本:

  1. PHP 5.5.15
  2. Imagick 3.1.2-5.5-ts-vc11-x86
  3. ImageMagick 6.8.6-10-Q16-x86

【问题讨论】:

  • 请你改写你的问题;目前还不清楚您实际上要做什么。你不需要给出很长的描述,你只需要给出你正在使用的代码,如果你认为有必要,可能是一个示例图像文件的链接,以及代码如何不做什么的描述你期待。
  • 您好,感谢您的评论。编辑了问题(也添加了输入/输出图像链接),希望它现在清楚我想要实现的目标。
  • 你能检查一下“\Imagick::queryformats();”将 DDS 列为受支持的格式。你的代码在 Centos 盒子上对我来说很好。
  • 我刚刚检查过,是的,它已列出。 Imagick::queryformats(); Output可能和我安装的版本有关(?)
  • 也许吧。你能在命令行上通过 ImageMagick 运行命令吗?我猜应该是“convert -define dds:compression=dxt3 testDDS.png testCLI.dds”

标签: php imagemagick imagick


【解决方案1】:

从上面的调试来看,你的 ImageMagick 版本不支持写入 DXT3 压缩的 DDS 文件。

解决这个问题的选项是:

  1. 使用不同的压缩格式 - DXT5 可能没问题,但与 DXT3 不完全相同。

  2. 升级到支持以 DXT3 格式写入的更新版本的 ImageMagick 和 Imagick。

【讨论】:

  • 我最终测试了一些版本,幸运的是添加了 DDS 写入支持的版本 (6.8.6-10) 是我能够使用 Imagick 3.1 的最后一个 ImageMagick 版本。 2-5.5-ts-vc11-x86(ImageMagick 6.8.6-10 以上的所有内容都导致 imagick 无法加载)
  • ImageMagick 不支持写入 DXT3 文件。仅添加了对 DXT1 和 DXT5 的支持。将来我们可能会增加对 DXT3 的支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 2011-09-15
  • 1970-01-01
  • 2016-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多